1. grep簡介
grep的工作方式是這樣的,它在乙個或多個檔案中搜尋字串模板。如果模板包括空格,則必須被引用,模板後的所有字串被看作檔名。搜尋的結果被送到螢幕,不影響原檔案內容。
grep可用於shell指令碼,因為grep通過返回乙個狀態值來說明搜尋的狀態,如果模板搜尋成功,則返回0,如果搜尋不成功,則返回1,如果搜尋的檔案不存在,則返回2。我們利用這些返回值就可進行一些自動化的文字處理工作。
2. grep正規表示式元字符集(基本集)
^ 錨定行的開始 如:'^grep'匹配所有以grep開頭的行。
$ 錨定行的結束 如:'grep$'匹配所有以grep結尾的行。
匹配乙個非換行符的字元 如:'gr.p'匹配gr後接乙個任意字元,然後是p。
* 匹配零個或多個先前字元 如:'*grep'匹配所有乙個或多個空格後緊跟grep的行。 .*一起用代表任意字元。
匹配乙個指定範圍內的字元,如'[gg]rep'匹配grep和grep。
[^]
匹配乙個不在指定範圍內的字元,如:'[^a-fh-z]rep'匹配不包含a-r和t-z的乙個字母開頭,緊跟rep的行。
/(../)
標記匹配字元,如'/(love/)',love被標記為1。
/<
錨定單詞的開始,如:'//>
錨定單詞的結束,如'grep/>'匹配包含以grep結尾的單詞的行。
x/ 重複字元x,m次,如:'0/'匹配包含5個o的行。
x/ 重複字元x,至少m次,如:'o/'匹配至少有5個o的行。
x/ 重複字元x,至少m次,不多於n次,如:'o/'匹配5--10個o的行。
/w 匹配文字和數字字元,也就是[a-za-z0-9],如:'g/w*p'匹配以g後跟零個或多個文字或數字字元,然後是p。
/w /w的反置形式,匹配乙個或多個非單詞字元,如點號句號等。
/b 單詞鎖定符,如: '/bgrepb/'只匹配grep。
3. 用於egrep和 grep -e的元字元擴充套件集
+ 匹配乙個或多個先前的字元。如:'[a-z]+able',匹配乙個或多個小寫字母後跟able的串,如loveable,enable,disable等。
? 匹配零個或多個先前的字元。如:'gr?p'匹配gr後跟乙個或沒有字元,然後是p的行。
a|b|c
匹配a或b或c。如:grep|sed匹配grep或sed
() 分組符號,如:love(able|rs)ov+匹配loveable或lovers,匹配乙個或多個ov。
x,x,x
作用同x/,x/,x/
4. posix字元類
為了在不同國家的字元編碼中保持一至,posix(the portable operating system inte***ce)增加了特殊的字元類,如[:alnum:]是a-za-z0-9的另乙個寫法。要把它們放到號內才能成為正規表示式,如[a- za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支援posix的字元類。
[:alnum:]
文字數字字元
[:alpha:]
文字字元
[:digit:]
數字字元
[:graph:]
非空字元(非空格、控制字元)
[:lower:]
小寫字元
[:cntrl:]
控制字元
[:print:]
非空字元(包括空格)
[:punct:]
標點符號
[:space:]
所有空白字元(新行,空格,製表符)
[:upper:]
大寫字元
[:xdigit:]
十六進製制數字(0-9,a-f,a-f)
5. grep命令選項
-? 同時顯示匹配行上下的?行,如:grep -2 pattern filename同時顯示匹配行的上下2行。
-b,--byte-offset
列印匹配行前面列印該行所在的塊號碼。
-c,--count
只列印匹配的行數,不顯示匹配的內容。
-f file,--file=file
從檔案中提取模板。空檔案中包含0個模板,所以什麼都不匹配。
-h,--no-filename
當搜尋多個檔案時,不顯示匹配檔名字首。
-i,--ignore-case
忽略大小寫差別。
-q,--quiet
取消顯示,只返回退出狀態。0則表示找到了匹配的行。
-l,--files-with-matches
列印匹配模板的檔案清單。
-l,--files-without-match
列印不匹配模板的檔案清單。
-n,--line-number
在匹配的行前面列印行號。
-s,--silent
不顯示關於不存在或者無法讀取檔案的錯誤資訊。
-v,--revert-match
反檢索,只顯示不匹配的行。
-w,--word-regexp
如果被/《和/>引用,就把表示式做為乙個單詞搜尋。
-v,--version
顯示軟體版本資訊。
6. 例項
要用好grep這個工具,其實就是要寫好正規表示式,所以這裡不對grep的所有功能進行例項講解,只列幾個例子,講解乙個正規表示式的寫法。
$ ls -l | grep '^a'
通過管道過濾ls -l輸出的內容,只顯示以a開頭的行。
$ grep 'test' d*
顯示所有以d開頭的檔案中包含test的行。
$ grep 'test' aa bb cc
顯示在aa,bb,cc檔案中匹配test的行。
$ grep '[a-z]/' aa
顯示所有包含每個字串至少有5個連續小寫字元的字串的行。
$ grep 'w/(es/)t.*/1' aa
如果west被匹配,則es就被儲存到記憶體中,並標記為1,然後搜尋任意個字元(.*),這些字元後面緊跟著另外乙個es(/1),找到就顯示該行。如果用egrep或grep -e,就不用"/"號進行轉義,直接寫成'w(es)t.*/1'就可以了
grep命令使用
目錄 極簡用法 引數含義 應用舉例 更多用法 grep pattern filename cat filename grep pattern匹配出包含pattern字串的相應行,pattern上也可以加雙引號。引數引數含義 補充說明 b給出匹配字串的在該行的字元偏移量 與 o合用 c給出匹配的行行數...
grep命令使用
使用在 helloworld 中搜尋乙個單詞,命令會返回乙個包含 hello 的文字行。grep hello helloworld.txt 1在多個檔案中搜尋 grep hello helloworld.txt helloworld.txt2 helloworld.txt3 1在多個檔案搜尋的時候,...
grep 命令使用
grep是linux中最常用的 文字處理工具 之一,用於在文字中查詢指定的字串。語法 grep option pattern file 引數 準備測試檔案file.txt 先檢視grep別名具體命令 alias grep自動顯示高亮 測試示例 grep zoo tmp file.txt 查詢file...