linux三劍客之grep命令詳解


先來小菜一碟:

  cat /etc/passwd | grep -c "/bin/bash$" 

  以上,用來統計/etc/passwd 文件中以/bin/bash結尾的用戶個數。

 

grep用來基於正則去實現行過濾的工具;它有很多衍生命令:

  egrep 擴展的grep,即默認使用擴展正則表達式的grep,更高級。

  fgrep 專用於文件行過濾的工具。

 

grep命令的常用選項:

  -E    開啟擴展正則模式,相當於使用egrep命令

  -F    關閉正則表達式,將PATTERN看做字符串直接匹配

  -G    默認,開啟基本正則表達

  -P    開啟perl兼容正則模式,利用perl語言中的正則匹配,表示我不會,因此不涉及

  以上,屬於pattern匹配方式的選擇————————————————————

  -e    該選項針對"-",由於grep默認不支持pattern中包含"-" 的匹配。使用-e可以避免報錯。

  -f    將PATTERN寫入指定文件,通過該選項,可調用文件中的PATTERN去匹配目標文件

  -i    匹配時,忽略大小寫進行

  -v    排除PATTERN,顯示剩余沒有被匹配到的內容行

  -w    將PATTERN視為一個單詞(前后不是非字母就是一個結束),相當於PATTERN中加入了 " \bPATTERN\b"去定界。

  -x    當PATTERN匹配了整行內容時,才輸出到屏幕;如

[root@localhost tmp]# cat /etc/passwd |grep "^root"
root:x:0:0:root:/root:/bin/bash
[root@localhost tmp]# cat /etc/passwd |grep -x "^root"
[root@localhost tmp]# cat /etc/passwd |grep -x "^root.*"
root:x:0:0:root:/root:/bin/bash

  以上是幫助PATTERN提高性能的選項——————————————————

  -c    PATTERN成功匹配到內容的次數

  --color=   設置高亮方式,可以用{never|always|auto} 來實現

  -L    當grep目標文件是多個文件時,結果會輸出“文件名:匹配行內容”的形式。-L則只將不包含匹配行的文件名輸出。和-v類似。

  -R    遞歸查詢匹配目錄子文件,當目標文件類型為目錄時

  -o    只輸出被PATTERN匹配到的內容,而非默認輸出整行內容

  -m #   匹配到內容的最大輸出行數,如三行包含PATTERN,只輸出兩行,即可-m 2

  -q    靜默執行

  -s    無提示,stderr會被忽略,-sq組合可完全屏蔽grep的輸出

  以上是對grep結果的規范選項—————————————————————

  -H    輸出文件名,在行內容前,當目標文件為多個時,默認

  -n    顯示行號

  以上針對grep結果查看的選項—————————————————————

  -A #    顯示匹配行及其后#行內容,理論上共#+1行

  -B #    顯示匹配行及其前#行內容,理論上共#+1行

  -C #    顯示匹配行及其前后#行內容,理論上共2#+1行

 

關於grep命令的執行狀態碼:

    0  成功匹配

    1  未匹配

    2  報錯,一般是目標文件不存在

基本正則表達式:

 

    其中,\(  \) 不僅可以用作反向引用的匹配范圍,也可以用於組合字符串。如下例:

[root@localhost tmp]# echo "xyz2xyzxy" |grep "xyz\?" -o
xyz
xyz
xy                -----xy被匹配到
[root@localhost tmp]# echo "xyz2xyzxy" |grep "\(xyz\)\?" -o
xyz
xyz      ------xy被為匹配到,由於xyz是一個組合,\?針對的是這個組合而言

 

擴展正則表達式:

    基於基本正則表達式;

    \?  變為  ?

    \+  變為  +

    \{\}相關的PATTERN一律變為{} 的PATTERN,省去了\標志

    \(\)     變為      ()

    同時引入了 " | " 表示邏輯或,表示匹配多個內容:

      chkconfig --list 3:on |grep -vE "crond|network|sshd|syslog" 

  

 更多示例:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM