linux shell 指令碼之深入淺出的grep的用法

github_zwl發表於2017-11-08

今天在糾結grep用法時候,由於講解的教材比較少,糾結了較長的時間。最終還是攻下了,所以拿出來給大家分享。

grep

      顯示匹配一個或多個模式的文字行,時常會作為管道後的第一步,以便對匹配上的資料做進一步處理。

最常見用法,查詢檔案內字串

[root@localhost /]# grep root /etc/shadow 
root:$1$HFDnk5hm$DSAc4IUls1yUyocXFNQ.A.:15141:0:99999:7::: 
[root@localhost /]#

引數

-E  使用擴充套件正規表示式進行匹配,使用grep –E 代替傳統的擴充套件正規表示式 egrep

擴充套件正規表示式和正規表示式的區別:  (-E選項的作用)

+  匹配一個或多個先前的字元

[root@localhost space]# touch test  

[root@localhost space]# vim test 
aaaredhat 
bbbredhat 
yyyredhat 
zzzredhat 
redhataaa 
redhatbbb 
redhatyyy 
redhatzzz 
:wq 

[root@localhost space]# cat test|grep –E '[a-h]+redhat' 
aaaredhat 
bbbredhat 
[root@localhost space]#

[root@localhost space]# cat test|grep -E 'redhat+[h-z]' 
redhatyyy 
redhatzzz 
[root@localhost space]#

當去掉-E選項的時候,正規表示式是不支援這樣查詢的。 
[root@localhost space]# cat test|grep 'redhat+[a-z]' 
[root@localhost space]#

?   匹配零個或多個先前的字元

[root@localhost space]# cat test|grep -E 'r?aaa' 
aaaredhat 
redhataaa 
[root@localhost space]# cat test|grep 'r?aaa' 
[root@localhost space]#

a|b|c  匹配a或b或c

[root@localhost space]# cat test|grep -E 'b|z' 
bbbredhat 
zzzredhat 
redhatbbb 
redhatzzz 
[root@localhost space]# cat test|grep 'b|z' 
[root@localhost space]#

() 分組符號

[root@localhost space]# cat test|grep -E 'redha(tz|ta)' 
redhataaa 
redhatzzz 
[root@localhost space]# cat test|grep 'redha(tz|ta)' 
[root@localhost space]#

x{m} 重複字元x,至少m次   (如果用正規表示式,格式為x\{m,\})

[root@localhost space]# cat test|grep -E 'a{3}' 
aaaredhat 
redhataaa 
[root@localhost space]# cat test|grep 'a\{3,\}' 
aaaredhat 
redhataaa 
[root@localhost space]#

-F  使用固定字串進行匹配 grep –F 取代傳統的 fgrep 。 使用正規表示式; 預設情況下 grep 使用的就是正規表示式,grep = grep –F

-e  通常,第一個非選項的引數會指定要匹配的模式,這個模式以-號開頭時,grep就會混淆,而-e選項就將它確定為引數

[root@localhost space]# cat test|grep -e '-test' 
-test 
[root@localhost space]# cat test|grep '-test' 
grep:無效選項 -- t 
Usage: grep [OPTION]... PATTERN [FILE]... 
Try `grep --help' for more information. 
[root@localhost space]#

-i  模式匹配時,忽略大小寫

[root@localhost space]# cat test|grep -i test 
-test 
-TEST 
[root@localhost space]#

-l  列出匹配模式的檔名稱  (列出當前目錄下含有test字串的檔案)

[root@localhost space]# grep -l 'test' ./* 
./test 
./test2 
[root@localhost space]#

-q  靜默模式,如果匹配成功,則grep會離開,不顯示匹配。

[root@localhost space]# grep test ./test 
-test 
[root@localhost space]# grep -q test ./test 
[root@localhost space]#

-s  不顯示錯誤資訊

-v  顯示不匹配的項

[root@localhost space]# cat test|grep test 
-test 
[root@localhost space]# cat test|grep -v test 
-TEST

[root@localhost space]#

相關文章