大夏shell程式設計學習筆記(5)

2021-06-29 15:21:12 字數 2154 閱讀 8331

今天終於要開始學習我個人覺得很頭疼的一部分內容了,正規表示式在我看來永遠都是那些程式設計很厲害的高中能夠玩轉的,為了提高自己的逼格,我也不得不觸碰一下這個比較煩人的東西,也可能是我的數學思維能力比較弱的原因,每次一接觸到正規表示式就頭疼。我特意找了一本可以推薦給大家的參考書,自己也還在研習中,至於學習心得,等我看完以後再給大家分享吧。

下面言歸正傳,今天主要是針對在sed和gawk編輯器中正規表示式的應用來一起基礎性的認識一下正規表示式。

①正規表示式是什麼

正規表示式就是你定義的、linux實用程式用來篩選文字的模式模板。linux實用程式在輸入資料時,將正規表示式模式和資料進行匹配,如果一致,它接受處理,如果不一致,它就拒絕。

②定義bre模式

在linux世界,常用的正規表示式引擎有兩種:

★ 基本正規表示式引擎

★ 擴充套件正規表示式引擎

在純文字中使用正規表示式要注意幾點:

★ 正規表示式區分的大小寫

★ 不必要侷限於完整的單詞,而且在字串中可以包含空格

★ 使用 . * [ ] ^${}\+?|()的時候需要用\進行轉義

定位符

脫字元(^):定義從資料流中文本行開頭開始的模式。注意^只能放在搜尋的關鍵字之前,否則失效。

例如:

$ cat data

this

is a boy

isthis a boy

$ sed -n '/^this/p' data

this

is a boy

定義結尾定位():

查詢資料

流行尾的

模式。注

意 只能放在搜尋的關鍵字之後,否則失效。而且必須輸入完整的行尾單詞,否則無法匹配。

例如:

$ sed -n

'/bo$/p'

data

點字元(.):用於匹配除換行符之外的任何單個字元。

★ 需要注意的是例如使用 .at 來匹配,那麼在文字中尋找的話必須是含有三個字元的行,比如「hat」、」 at」等,如果將at放在行首,那麼將無法成功匹配。

字元類([ ]):在[ ]中定義可以包含的需要文字。

否定字元類([^ ]):匹配除了指定文字模式之外的任意字元。

例如:

$ cat data8

60633

4353

addrdd

$ sed -n '/^[0123456][0123456][0123456][0123456]$/p' data8

4353

$ sed -n '/^[0-6][0-6][0-6][0-6]$/p' data8

4355

$ sed -n '[a-go-t]dd/p' data8

addrdd

星號(*):在某個字元之後加乙個星號表示該字元必須在匹配模式的文字中不出現或者出現多次。

例如:

$ cat data9

this

this

③擴充套件的正規表示式

gwak可以識別擴充套件的正規表示式,而sed無法識別擴充套件的正規表示式。

問號(?):表示前面的字元可以出現一次或者不出現,但是不可以重複出現。

加號(+):表示前面的字元可以出現一次或者多次,但是不可以不出現。

大括號():指定對重複的正規表示式的限制,需要使用–re-interval命令選項。

管道( | ):使用邏輯or指定正規表示式檢查資料流時使用兩個或多個模式,只要有乙個模式匹配就輸出。

表示式分組(( )):將正規表示式模式分組,乙個組合作為乙個標準字元處理。

例如:

$ cat data10

beet

baet

batbet

beeeet

$ gawk '/b[ae]?t/'

batbet

$ gawk --re-interval '/b[ae]t/'

beet

baet

batbet

大夏shell程式設計學習筆記(1)

linux標準檔案描述符 檔案描述符 縮寫描述 0stdin 標準輸入 1stdout 標準輸出 2stderr 標準錯誤 重定向錯誤 ls al test 2 test4 僅重定向錯誤 ls al test test4 所有輸出都傳送到同乙個位置,預設錯誤訊息優先於標準輸出 exec 3 關閉檔案...

大夏shell程式設計學習筆記(3)

建立選單指令碼的小技巧 要在echo命令中包含字元 例如製表符和換行符 必須使用 e選項。echo en將顯示該行,而不再行為新增換行符。在read命令中使用 n選項僅獲取乙個字元,這樣允許使用者輸入乙個數字而不必再按回車。簡單的例子 一下例子實現了乙個簡單的獲取linux系統管理資訊。funcat...

shell程式設計學習筆記

c語言中文網 shell教程 學習這篇文章時,發現它在單引號和雙引號有什麼區別上寫的不夠準確,於是網上查詢資料 shell程式設計中單引號,雙引號,各種括號的區別 學習這篇部落格時,發現寫的還是不夠準確,繼續網上查詢資料 雙引號作用與單引號類似,區別在於它沒有那麼嚴格。單引號告訴shell忽略所有特...