1. 程式人生 > >linux常備工具之grep

linux常備工具之grep

grep能夠在一個或多個檔案中搜索指定的模式或關鍵字,該命令的一般格式為:

grep pattern files

用grep搜尋檔案內容

先來看一下grep最簡單的用法。假設當前目錄有一個文字檔案c.txt,它的內容如下

$ cat c.txt 
jobcenter-test-1
jobcenter-test-2
jobcenter-test-3
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3

假設我們想找出包含prod的所有行,可以使用下面的命令

$ grep prod c.txt 
jobcenter-prod-1
jobcenter-prod-2
jobcenter-prod-3

這樣就很簡單地完成了對單個檔案內容的搜尋。

$ grep keywords file1 file2 file3

上面的用法可以同時對三個檔案的內容進行搜尋

$ grep keywords *

上面的用法可以同時對當前目錄下的所有檔案的內容進行搜尋

在管道中使用grep來檢索輸入

如果不指定檔名的話,grep將對標準輸入進行搜尋,這種用法經常出現在linux管道中。例如:

$ ls -l | grep file1

上面的用法僅會列出file1的檔案資訊。

$ ps -ef | grep process_name

上面的用法常用於查詢一個程序的資訊。

$ tail -f a.log | grep --line-buffered keywords

結合--line-buffered引數,還可以對tail -f的結果進行過濾。上面的用法常用來過濾某些正在持續寫入的日誌檔案。

搜尋時的常用引數

使用grep搜尋時,配合下面的引數,可以應對更多的情況。下面是我個人比較常用的引數

  • -i 忽略大小寫。
  • -v 反向搜尋,不顯示滿足搜尋條件的。(正常情況下是隻顯示滿足搜尋條件的)
  • -e 使用正則表示式
  • -E 使用擴充套件的正則表示式。這個引數可以匹配更高階的正則用法,具體也沒搞不太清楚
  • -n 顯示行號
  • -A num 顯示配合結果後面的num行內容(After)
  • -B num 顯示配合結果前面的num行內容(Before)
  • -C num 顯示配合結果上面和下面各num行內容(Context)
  • -l 多檔案搜尋時,加入此引數的話,只顯示匹配內容的檔名
  • --no-filename 多檔案搜尋時,預設情況下會顯示出匹配到的每一行內容以及所在的檔名。加入此引數後,將不顯示匹配內容所在的檔名。