一、簡介(Global Regular Expression Print)
grep 是一種強大的文本搜尋工具,它能使用Regex搜尋文本,並把匹配的行列印到標準輸出。如果指定了多個檔案,會在每一行前面顯示檔案名稱。並不影響原檔案內容。
grep可用於shell指令碼,因為grep通過返回一個狀態值來說明搜尋的狀態,如果模板搜尋成功,則返回0,如果搜尋不成功,則返回1,如果搜尋的檔案不存在,則返回2。我們利用這些傳回值就可進行一些自動化的文本處理工作。
二、格式
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
三、grep Regex元字元集
1.基本集其實跟 sed 差不多,隨便列一下吧:
^ $ . * [] [^] \(..\) \< \> x\{m,n\} x\{m\} x\{m,\}
\w #匹配文字和數字字元,也就是[A-Za-z0-9]
\W #\w的反置形式,匹配一個或多個非單詞字元,如點號句號等
\b #單詞鎖定符,如: ‘\bgrepb\’只匹配grep
2.用於 egrep 和 grep -E 的元字元擴充集
+ #匹配前一個字元一次或多次
? #匹配前一個字元0次或1次
a|b|c #可選模式,匹配a或b或c,如:love(able|rs)匹配loveable或lovers
() #分組符號,如:(ov)+,匹配一個或多個ov
x{m},x{m,},x{m,n} #作用同x\{m\},x\{m,\},x\{m,n\}
3.POSIX字元類
為了在不同國家的字元編碼中保持一至,POSIX增加了特殊的字元類,如[:alnum:]是[A-Za-z0-9]的另一個寫法。
[:alunm:] [:alpha:] [:digit:] [:space:] [:upper:] #等等
四、grep 常用命令選項:
-v #反檢索,只顯示不匹配的行
-l #列印匹配模板的檔案清單
-L #列印不匹配模板的檔案清單
-n #在匹配的行前面列印行號
-2 #grep -2 pattern filename 同時顯示匹配行的上下2行
-c #只列印匹配的行數,不顯示匹配的內容
-f #從檔案中提模數板。空檔案中包含0個模板,什麼都不匹配
-h #當搜尋多個檔案時,不顯示匹配檔案名稱首碼
-i #忽略大小寫差別
-w #如果被\<和\>引用,就把運算式做為一個單詞搜尋
五、使用舉例
測試檔案:
cat filename
f
f3
f33
f333
f3333
f1
f31
f2
f32
f323
f
1.顯示包含 33 的行
grep '33' filename
f33
f333
f3333
2.至少包含三個數位行
grep '[[:digit:]]\{3,\}' filename
f333
f3333
f323
3.匹配 3 一次以上的行:
grep 'f3\{1,\}' filename
f3
f33
f333
f3333
f31
f32
f323
4.匹配 f 後跟一個以上 3 的行
grep 'f3\{1,\}\>' filename
f3
f33
f333
f3333
5.匹配 f 後跟偶數個 3
grep -E 'f(33)+\>' filename
f33
f3333