天天看點

Linux下文本搜尋工具grep指令使用入門

如果想通過使用grep指令來實作理想化的文本搜尋,對正規表達式的了解是比不可少的。對正規表達式文法做了一個簡單的介紹,提供了一個簡單的入門。碼農也可以自己google一下其他的參考資料。下面就grep指令的使用做個入門級的介紹。

linux下除了grep指令可以完成文本搜尋外,還存在egrep,fgrep,rgrep三個指令。這三個指令都是由grep加上一些控制參數演變而來,如egrep=grep -e, fgrep=grep -f, rgrep=grep -r(後面會介紹這些參數),是以以碼農隻需關注于grep指令即可。

(1)grep [options] pattern [file...]

(2)grep [options] [-e pattern | -f pattern] [file...]

示例:

-e, --extended-regexp 将pattern作為擴充的正規表達式解釋,如grep -e ‘^\s‘ hello.c // 搜尋hello.c檔案中以空白字元開始的行,相當于egrep ‘^\s‘

hello.c

-f, --fixed-strings 将pattern解釋為固定的字元串,不作正規表達式分析。grep -f ‘main()‘ hello.c // 等同于fgrep ‘main()‘ hello.c

-e pattern, --regexp=pattern 指定pattern為搜尋正規表達式,可以通過使用這個選項來指定多個搜尋模式,或者用來制定以橫線-開始的搜尋模式,如grep -e hello -e world hello.c //搜尋含有hello或者world的代碼行

-f file, --file=file 指定從檔案file中讀取搜尋模式,一行一個搜尋模式

-i, --ignore-case模式比對時忽略大小寫

-v, --invert-math 反向比對,選擇那些不含有比對模式的行,如grep -e -v hello hello.c //輸出那些不含有hello的代碼行

-x, --line-regexp 将一整行文本與搜尋模式pattern進行比對,輸出比對行,如grep -e ‘^\s*$‘ -x hello.c //查找空白行

-c, --count代替輸出比對的文本行,還是輸出比對的次數

-m num, --max-count=num 在一個檔案中比對次數超過num後,就停止搜尋比對

-o, --only-matching 代替輸出比對的文本行,而是僅僅輸出比對的部分文本

-n, --line-number 在輸出的比對文本行前面添加行号,這個行号指的原檔案中的文本所在行号

-r, -r, --recursive 遞歸地從目錄下的每個檔案搜尋比對pattern,如grep -r hello . -n 10 //在目前目錄下的每個檔案(包括子目錄中的檔案)搜尋單詞hello,當在一個檔案中比對次數超過10次時,立即退出目前檔案,對下一個檔案進行搜尋比對

-d action, --devices=action 如果搜尋檔案是一個目錄,使用action來處理它。action是read時,将目錄檔案當作普通檔案;是skip時,将目錄檔案跳過;是recurse時,則遞歸地讀取目錄下的所有檔案;grep

hello -d recurse . //相當于grep hello -r .

注:rgrep hello . = grep hello -r . = grep hello -d recurse .

參考文獻:

文獻1:http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.90).aspx

文獻2:http://regex.bastardsbook.com/

文獻3:http://my.oschina.net/wenhaowu/blog/219956

附上手冊: