Linux Grep命令使用的詳細介紹

2021-04-13 04:52:51 字數 3147 閱讀 1432

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'就可以了。

linux grep命令的使用

用 grep 搜尋文字檔案 如果您要在幾個文字檔案中查詢一字串,可以使用 grep 命令。grep 在文字中搜尋指定的字串。假設您正在 usr src linux documentation 目錄下搜尋帶字串 magic 的檔案 grep magic usr src linux documentat...

linux grep命令的使用

用 grep 搜尋文字檔案 如果您要在幾個文字檔案中查詢一字串,可以使用 grep 命令。grep 在文字中搜尋指定的字串。假設您正在 usr src linux documentation 目錄下搜尋帶字串 magic 的檔案 grep magic usr src linux documentat...

Linux grep命令使用大全

grep是一種使用正規表示式的多用途文字搜尋工具 global search regular expression re and print out the line 主要引數 c 僅僅輸出匹配行的計數。i 不區分大 小寫 僅僅適用於單字元 h 查詢多檔案時不顯示檔名稱。l 查詢多檔案時僅僅輸出包括...