shell指令碼之正規表示式

2021-10-01 14:06:16 字數 3706 閱讀 7202

一、基礎正規表示式例項:

元字元總結:

在linux系統中常見的檔案處理工具中grep和sed支援基礎正規表示式。

grep命令選項:

-i:查詢時不區分大小寫;

-v:查詢時反向輸出,如查詢不包含某些字元的內容;

-n:表示查詢出結果後顯示行號;

這三個選項可以結合使用,如「-in」,查詢時不區分大小寫並顯示行號。

示例①:

[root@localhost ~]# grep -n 『the』 test.txt #查詢test檔案中包含字元「the」的行

#可以將選項改為「-vn」來查詢不包含「the」的行。

示例②:

[root@localhost ~]# grep -n 「sh[io]rt」 test.txt #[io]表示匹配 i 或o的顯示出來

#[ ]中無論有幾個字元都僅代表匹配乙個字元即可。

示例③:

[root@localhost ~]# grep -n 『oo』 test.txt #查詢包含字元「oo」的行。

[root@localhost ~]# grep -n 『ooo*』 test.txt #查詢包含至少兩個o以上的字串。

[root@localhost ~]# grep -n 『o』 test.txt #查詢包含兩個「o」的字串。

[root@localhost ~]# grep -n 『o』 test.txt #查詢包含2~5個o的字串。

[root@localhost ~]# grep -n 『o』 test.txt #查詢包含兩個以上「o」的字串。

示例④:

[root@localhost ~]# grep -n 『[^w]oo』 test.txt #查詢「oo」前面不是w的字串。

[root@localhost ~]# grep -n 『[^a-z]oo』 test.txt #查詢oo前不是小寫字母的行。

[root@localhost ~]# grep -n 『[0-9]』 test.txt #查詢包含數字的行。

[root@localhost ~]# grep -n 『^the』 test.txt #查詢以「the」開頭的行。

[root@localhost ~]# grep -n 『1

』 test.txt #查詢以小寫字母開頭的行。

[root@localhost ~]# grep -n 『2

』 test.txt #查詢以大寫字母開頭的行。

[root@localhost ~]# grep -n 『[a-za-z]』 test.txt #查詢不以字母開頭的行。

[root@localhost ~]# grep -n 『.$』 test.txt #查詢以 「 . 」 結尾的行。

[root@localhost ~]# grep -n 『w…d』 test.txt #查詢w開頭,中間兩個未知字元,d結尾的行。

[root@localhost ~]# grep -n 『woo*d』 test.txt #查詢w開頭d結尾,中間至少包含乙個o的字串。

[root@localhost ~]# grep -n 『w.d』 test.txt #查詢w開頭d結尾,中間的字元可有可無的字串。

[root@localhost ~]# grep -n '[0-9][0-9]』 test.txt #查詢任意數字所在行

二、擴充套件正規表示式

一般來說基礎正規表示式足以我們使用了,但如果想要簡化整個指令,那麼就可以使用擴充套件正規表示式,如果使用擴充套件正規表示式,需要使用egrep或awk命令,常見的擴充套件正規表示式的元字元主要包括如下幾個:

二.sed

語法如下:

[root@localhost ~]# ]sed [-nefr] [動作 ]

1選項與引數如下:

n :使用安靜(silent)模式。在一般sed的用法中,所有來自stdin 的資料一般都會被列出到螢幕上。但如果加上-n引數後,則只有經過sed特殊處理的那一行(或者動作)才會被列出來。

-e :直接在命令列介面上進行sed的動作編輯;

-f :直接將sed的動作寫在一乙個檔案內, -f filename 則可以執行filename 內的sed動作;

-r:sed的動作支援的是延伸型正規表示式的語法。(預設是基礎正規表示式語法)

-i:直接修改讀取的檔案內容,而不是由螢幕輸出。

案例:[root@localhost ~]# nl /etc/passwd | sed '2,5』d

\刪除2到5行內容

[root@localhost ~]# nl /etc/passwd | sed 『asd』

\在所有後面行加上asd

[root@localhost ~]# nl /etc/passwd | sed 『2a da …

aaa』

\增將兩行以上

[root@localhost ~]# nl /etc/passwd | sed 『2,5c ccccccccccccc』

\第2-5行的內容取代成為ccccccccc

[root@localhost ~]# nl /etc/passwd | sed -n 『5,7p』

\僅列出5到7行的內容

部分資料的搜尋與取代的功能

sed 『s/要被取代的字串/新的字串/g』

sed 的「 -i 」選項可以直接修改檔案內容,

延伸正規表示式

三.awk

awk是乙個強大的工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。

語法如下:

[root@localhost ~]# awk '條 件型別1條件型別2 … 』 filenamne

1[root@localhost ~]# last -n 5 | awk 『』

\取出帳號與登陸者的 ip ,且帳號與 ip 之間以 [tab] 隔開

**整個 awk 的處理流程是:

讀入第一行,並將第一行的資料填入 $0, $1, $2… 等變數當中;

依據 「條件型別」 的限制,判斷是否需要進行後面的 「動作」;

做完所有的動作與條件型別;

若還有後續的「行」的資料,則重複上面 1~3 的步驟,直到所有的資料都讀完為止。

awk的邏輯運算字元

邏輯運算上面亦即所謂的大於、小於、等於等判斷式上面,習慣上是以「 == 」來表示;

如果是直接給予乙個值,例如變數設定時,就直接使用 = 而已。

a-z ↩︎

a-z ↩︎

shell指令碼 正規表示式

一 正規表示式 正規表示式是用來描述字串排列和匹配模式的一種語法規則,是字串的模式分割 匹配 查詢和替換操作。正規表示式是包含匹配,操作字串,如grep,awd,sed,而萬用字元是完全匹配,如ls,find,cp 正則的與萬用字元的不同,如正規表示式aa 第二個a不起作用,意思是以a開頭的,而萬用...

shell 指令碼 正規表示式

字元類 character class 如上例的x和 y,它們在模式中表示乙個字元 但是取值範圍是 一類字 符中的任意乙個。數量限定符 quantifier 郵件位址的每一部分可以有乙個或多個x字元 ip位址的每一部 分 可以有1 3個y 字元位置限定符 anchor 部分,用普通字元 和 隔 開 ...

shell指令碼 正規表示式

正規表示式分為基礎正則和擴充套件正則,都是為了匹配符合預期要求的字串 只需要記住,對檔案內容或是展示文字的操作都是正則,而對目錄或檔名的操作則都是萬用字元 例如find指令 擴充套件正則包含基礎正則,而且多出了 四個指令 注意這裡的 要和管道符分開 擴充套件正則不需要像基礎正則一樣對某些符號進行轉義...