[Intern][2019.03.22] 讀 鳥哥 有感1

来源:https://www.cnblogs.com/jackablack/archive/2019/03/22/10579394.html
-Advertisement-
Play Games

本文關鍵詞:shell 判斷、grep正則表達式使用和貪婪匹配理解 1. if [ $a -le $b ], 一開始自學的時候我以為 [ ... ] 就是普通的,語法規定的結構,結果其實人家是"test"的變體,它的效果等同於使用 " test ... ",結果是將指令 ... 執行完了以後輸出出來 ...


本文關鍵詞:shell 判斷、grep正則表達式使用和貪婪匹配理解

 

1. if [ $a -le $b ], 一開始自學的時候我以為 [ ... ] 就是普通的,語法規定的結構,結果其實人家是"test"的變體,它的效果等同於使用 " test ... ",結果是將指令 ... 執行完了以後輸出出來的東西作為返回值。註意,他並不是能執行所有的命令,作為“判斷符號”,他要求裡面的指令運行結果是 TRUE 或者 FALSE。

2. 如果xxx,就輸出xxx,除了使用 if 判斷語句來實現以外,還可以用 [ xxxx ] && echo xxxx && xxxxx 這樣的方式來實現。原理是當一條指令執行完,只要沒有報錯,而且他不是一個判斷式,那麼它就會返回一個 TRUE ,因此想剛纔那種寫法就能用一個判斷式子寫出一連串的後續操作。不過感覺最好不要用這個方法寫太長,代碼會很不好看的。

3. 多條件判斷有兩種寫法哦! [ $xxx == xxx -o/-a $yyy == yyy ]  和  [ $xxx == xxx ] ||/&& [ $yyy == yyy ] 都可以。值得註意的是,前後要留有空格才可以,並且使用 || 和 && 要在 [ ] 的外面才行。

4.[ "$xxx" == "xxx" ] 才是最穩妥的寫法,不然bash會出各種奇奇怪怪的問題。

5.對於bash,它概念里的塊作用域(BlockScope,JavaScript 說法)用小括弧()包裹。所謂塊作用域,是說在這個區域內定義的變數,離開這個區域無法被訪問到,大致和Java裡面的局部變數比較類似,也類似於JS裡面的 “let” 關鍵字定義的變數。

6.grep 命令在使用的時候可以通過管道來增強其他命令的效果,比如 which bin | grep 'username' 就可以查找路徑裡面帶有username字元串的bin文件夾的位置咯。註意,單引號不要省略,因為在寫正則表達式的時候,沒有單引號轉義字元 \ 將工作不正常!

對於Bash,七條命令有五種不同的含義(下麵的x<n>代表n個字母)。他們分別是:(1,2,7)查找“x\{0-2}”;(3)查找“x\{0-4}”;(4)查找“x\{0-4\}”;(5)查找一個0-4字母組成的字元串;(6)語法錯誤。

為什麼上面的例子中明明是 \{0,4\} 卻標紅了五個字母?我的理解是adsfx中,按照正則表達式貪婪匹配(能標紅最多字元的方式匹配)原則,字元串裡面找到了第一個匹配表達式的字元之後,還會繼續向右尋找符合要求的字元串,於是就,按照"x0"這個條件把全文所有字母標紅了。實際上,他匹配到的是這樣一個數組:

[ 'adsf','x','dad' ]。

下麵的圖就能更清楚地顯示這一點!

這三個體現了貪婪匹配的原則——儘可能標出最多的字元。註意x後面那是個 1 不是 l

 為什麼" 52148962asdfaadsfx1dad4248 "裡面沒有繼續匹配比如"sdfaad"這樣的串呢?因為已經匹配的串asdfaa已經不能參與匹配了,剩下的dsfx只有四個字母,不符合要求了!

那麼非貪婪匹配是怎麼一回事?非貪婪匹配又叫做懶惰匹配,grep原生不支持這種匹配模式,需要加上 -P 使用Perl語法才能執行,只需要在量詞後面加上?(直接加,不要有任何的空格)就可以!

非貪婪匹配返回的結果是儘可能短的(而不是儘可能長),一般用於".*"這種廣泛匹配上,比如下麵的例子,諸位好漢可以猜一猜他們的輸出結果是什麼,以及為什麼這樣輸出(輸出在綠色的方塊下麵):

 練習題(?)

 

 我自己的一些看法,不知道有無錯誤,希望各位看官如果有空,和我討論一下

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 執行dotnet-new selfhost sstest 創建項目,然後打開解決方案 修改ssTest.ServiceModel中的Hello.cs,在HellopResponse中添加時間屬性,然後修改MyServices中的代碼 運行程式,打開Postman查看返回結果 可以看到Json中dat ...
  • 本節導航 基本概念 併發編程 TPL 線程基礎 windows為什麼要支持線程 線程開銷 CPU的發展 使用線程的理由 如何寫一個簡單Parallel.For迴圈 數據並行 Parallel.For剖析   優秀軟體的一個關鍵特征就是具有併發性。過去的幾十年,我們可以進行併發編程 ...
  • 在docker中安裝鏡像,一般過程是,docker search 軟體名稱。 本文以tomcat為例,講解下載指定版本TAG的tomcat。 搜索tomcat鏡像 發現只有tomcat,而如果docker pull tomcat,下載下來的是最新版的tomcat,也就是tomcat11。假設希望下載 ...
  • 1.services.src 啟動服務 2.cmd 命令: 1.cmd查看埠 netstat -ano 1.快速啟動mysql:進入cmd,輸入,net start mysql; ...
  • 背景 信息物理系統CPS通過集成先進的感知、計算、通 信、控制等信息技術和自動控制技術,構建了物理空間與信息空間中人、 機、物、環境、信息等要素相互映射、適時交互、高效協同的複雜系統, 實現系統內資源配置和運行的按需響應、快速迭代、動態優化。我們把信息物理系統定位為支撐兩化深度融合的一套綜合技術體系... ...
  • Linux 自動化部署Rsyslog服務 源碼如下: 1.在服務端運行部署腳本,選擇部署Rsyslog伺服器,選擇UDP傳輸方式 #伺服器腳本端部署完之後,可以看相應的配置文件是否修改,這裡省略了 2.在客戶端運行部署腳本,選擇部署Rsyslog客戶端,選擇UDP傳輸方式,註意選擇傳輸方式時必須與服 ...
  • 英偉達驅動版本是384.130 顯示的NVRM version: NVIDIA UNIX x86_64 Kernel Module是:384.130。 若是舊的版本就會出現如下問題。 這個問題出現的原因是kernel mod 的 Nvidia driver 的版本沒有更新,一般情況下,重啟機器就能夠 ...
  • 有些插在ATCA中的x86刀片雖然是提供了Micro HDMI顯示介面的,但是可能由於廠家出於節省成本的考量,沒有給板卡配備顯卡,那麼在無圖形界面下安裝系統,就成為一個運維人員應知的一件事情。這裡我們以安裝CentOS的7.3.1611為例。 一般的通信電子設備都應該把最基本的串口做出來。串口形式各 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...