網路上關於grep指令的解釋一搜一大堆,基本上都是把man指令大致翻譯了一下,說實話,看完就忘!個人認為,學習指令最好的方式就是模擬真實環境,寫出一些可能用到的指令組合,然後慢慢消化,起碼我就是這麼過來的。一開始基本上都是死記,然後再慢慢擴展視野,時間長了,累積就多了。好了,進入正題,談牛逼的grep命令。
grep是general regular expression parser 的縮寫,我們可以把它簡單理解為linux系統的一個搜尋指令。接下來,直接上例子:
1.在某個文件中搜尋指定字串
在/etc/passwd檔案中,搜尋字串guolei:
grep 'guolei' /etc/passwd
注意,guolei的引號可以省略,但是如果搜尋字串中有空格或是你使用正規表示式,就需要加了。
2.在多個檔案中搜尋指定字串
在目前目錄中,搜尋包含字串guolei的檔案:
grep -r guolei *
注意:-r是recursive的縮寫,表示遞歸的搜尋。
在目前目錄的.java檔案中,搜尋包含字串guolei的檔案:
grep -r guolei *.java
有時候,我們的搜尋結果可能比較多,我們可以結合less指令來展示結果
grep -r guolei *.java | less
或搜尋結果比較多,我們只需要列出文件名:
grep -rl guolei *.java
還有一種需求比較常見,我們常常想找到某一個目錄中,包含指定字串的文件,注意上面的指令不可以遞歸查找。例如,我們想在當前目錄下遞歸的查找所有.java檔案中包含字串guolei的檔案:
find . -type f -name *.java -exec grep -il guolei {} \;
3.搜尋時忽略大小寫
在搜尋guolei時,忽略大小寫:
grep -ri guolei *在搜尋guolei時,忽略大小寫:
grep -rn guolei *.java
在搜尋guolei時,忽略大小寫:
grep -riv guolei * | less在搜尋guolei時,忽略大小寫:
ps -ef | grep mysql
在搜尋guolei時,忽略大小寫:
:-i是Ignore case的縮寫,表示忽略大小寫。 4.搜尋結果列出行號 在搜尋結果中,列出字串出現位置的行號碼:ls | grep 'html$'注意-n是number的縮寫,表示行號的意思。 5.反向搜尋 實際開發中,還有一種情況比較常見,我們要在某個目錄下搜尋不包含某個字串的檔案:
rrreee
注意:-v是versereverse的縮寫,表示逆向的意思。上面的例子為在目前目錄中搜尋不包含guolei的檔案。