一、基礎正規表示式例項:
元字元總結:
在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指令 擴充套件正則包含基礎正則,而且多出了 四個指令 注意這裡的 要和管道符分開 擴充套件正則不需要像基礎正則一樣對某些符號進行轉義...