1、grep指令使用簡單執行個體
$ grep ‘test’ d*
顯示所有以d開頭的檔案中包含 test的行。
$ grep ‘test’ aa bb cc
顯示在aa,bb,cc檔案中比對test的行。
$ grep ‘[a-z]\{5\}’ aa
顯示所有包含每個字元串至少有5個連續小寫字元的字元串的行。
$ grep ‘w\(es\)t.*\1′ aa
如果west被比對,則es就被存儲到記憶體中,并标記為1,然後搜尋任意個字元(.*),這些字元後面緊跟着 另外一個es(\1),找到就顯示該行。如果用egrep或grep -E,就不用”\”号進行轉義,直接寫成’w(es)t.*\1′就可以了。
2、grep指令使用複雜執行個體
假設您正在’/usr/src/Linux/Doc’目錄下搜尋帶字元 串’magic’的檔案:
$ grep magic /usr/src/Linux/Doc/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中檔案’sysrp.txt’包含該字元串,讨論的是 SysRQ 的功能。
預設情況下,’grep’隻搜尋目前目錄。如果 此目錄下有許多子目錄,’grep’會以如下形式列出:
grep: sound: Is a directory
這可能會使’grep’ 的輸出難于閱讀。這裡有兩種解決的辦法:
<b>明确要求搜尋子目錄:grep -r</b>
<b>或忽略子目錄:grep -d skip</b>
如果有很多 輸出時,您可以通過管道将其轉到’less’上閱讀:
$ grep magic /usr/src/Linux/Documentation/* | less
這樣,您就可以更友善地閱讀。
有一點要注意,您必需提供一個檔案過濾方式(搜尋全部檔案的話用 *)。如果您忘了,’grep’會一直等着,直到該程式被中斷。如果您遇到了這樣的情況,按 ,然後再試。
下面還有一些有意思的指令行參數:
grep -i pattern files :不區分大小寫地搜尋。預設情況區分大小寫,
grep -l pattern files :隻列出比對的檔案名,
grep -L pattern files :列出不比對的檔案名,
grep -w pattern files :隻比對整個單詞,而不是字元串的一部分(如比對’magic’,而不是’magical’),
grep -C number pattern files :比對的上下文分别顯示[number]行,
grep pattern1 | pattern2 files :顯示比對 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :顯示既比對 pattern1 又比對 pattern2 的行。
grep -n pattern files 即可顯示行号資訊
grep -c pattern files 即可查找總行數
這裡還有些用于搜尋的特殊符号:
\ 分别标注單詞的開始與結尾。
例如:
grep man * 會比對 ‘Batman’、’manic’、’man’等,
grep ‘\grep ‘\’ 隻比對’man’,而不是’Batman’或’manic’等其他的字元串。
‘^’:指比對的字元串在行首,
‘$’:指比對的字元串在行 尾,
<b>3、常用grep執行個體</b>
(1)多個檔案查詢
grep "sort" *.doc #見檔案名的比對
(2)行比對:輸出比對行的計數
grep -c "48" data.doc #輸出文檔中含有48字元的行數
(3)顯示比對行和行數
grep -n "48" data.doc #顯示所有比對48的行和行号
(4)顯示非比對的行
grep -vn "48" data.doc #輸出所有不包含48的行
(5)大小寫敏感
grep -i "ab" data.doc #輸出所有含有ab或Ab的字元串的行
4, 正規表達式的應用
(1)正規表達式的應用 (注意:最好把正規表達式用單引号括起來)
grep '[239].' data.doc #輸出所有含有以2,3或9開頭的,并且是兩個數字的行
(2)不比對測試
grep '^[^48]' data.doc #不比對行首是48的行
(3)使用擴充模式比對
grep -E '219|216' data.doc
(4) ...
這需要在實踐中不斷應用和總結,熟練掌握正規表達式。
<b>4、grep常用形式(持續更新)</b>