linux grep命令詳解

2021-08-25 06:11:58 字數 3959 閱讀 6330

grep命令是linux下的行過濾工具,其引數繁多,下面就一一介紹個個引數的作用,希望對大家有所幫助。

grep -- print lines matching a pattern (將符合樣式的該行列出)

◎語法: grep [options]

pattern [file...]

grep用以在file內文中比對相對應的部分,或是當沒有指定檔案時,

由標準輸入中去比對。 在預設的情況下,grep會將符合樣式的那一行列出。

此外,還有兩個程式是grep的變化型,egrep及fgrep。

其中egrep就等同於grep -e ,fgrep等同於grep -f 。

◎引數1. -a num,--after-context=num

除了列出符合行之外,並且列出後num行。

ex: $ grep -a 1 panda file

(從file中搜尋有panda樣式的行,並顯示該行的後1行)

2. -a或--text

grep原本是搜尋文字檔案,若拿二進位制的檔案作為搜尋的目標,

則會顯示如下的訊息: binary file 二進位制檔名 matches 然後結束。

若加上-a引數則可將二進位制檔案視為文字檔案搜尋,

相當於--binary-files=text這個引數。

ex: (從二進位制檔案mv中去搜尋panda樣式)

(錯誤!!!)

$ grep panda mv

binary file mv matches

(這表示此檔案有match之處,詳見--binary-files=type )

$(正確!!!)

$ grep -a panda mv

3. -b num,--before-context=num

與 -a num 相對,但這此引數是顯示除符合行之外

並顯示在它之前的num行。

ex: (從file中搜尋有panda樣式的行,並顯示該行的前1行)

$ grep -b 1 panda file

4. -c [num], -num, --context[=num]

列出符合行之外並列出上下各num行,預設值是2。

ex: (列出file中除包含panda樣式的行外並列出其上下2行)

(若要改變預設值,直接改變num即可)

$ grep -c[num] panda file

5. -b, --byte-offset

列出樣式之前的內文總共有多少byte ..

ex: $ grep -b panda file

顯示結果類似於:

0:panda

66:pandahuang

123:panda03

6. --binary-files=type

此引數type預設為binary(二進位制),若以普通方式搜尋,只有2種結果:

1.若有符合的地方:顯示binary file 二進位制檔名 matches

2.若沒有符合的地方:什麼都沒有顯示。

若type為without-match,遇到此引數,

grep會認為此二進位制檔案沒有包含任何搜尋樣式,與-i 引數相同。

若tpye為text, grep會將此二進位制檔案視為text檔案,與-a 引數相同。

warning: --binary-files=text 若輸出為終端機,可能會產生一些不必要的輸出。

7. -c, --count

不顯示符合樣式行,只顯示符合的總行數。

若再加上-v,--invert-match,引數顯示不符合的總行數。

8. -d action, --directories=action

若輸入的檔案是乙個資料夾,使用action去處理這個資料夾。

預設action是read(讀取),也就是說此資料夾會被視為一般的檔案;

若action是skip(略過),資料夾會被grep略過:

若action是recurse(遞迴),grep會去讀取資料夾下所有的檔案,

此相當於-r 引數。

9. -e, --extended-regexp

採用規則表示式去解釋樣式。

10. -e pattern, --regexp=pattern

把樣式做為乙個partern,通常用在避免partern用-開始。

11. -f file, --file=file

事先將要搜尋的樣式寫入到乙個檔案,一行乙個樣式。

然後採用檔案搜尋。

空的檔案表示沒有要搜尋的樣式,因此也就不會有任何符合。

ex: (newfile為搜尋樣式檔案)

$grep -f newfile file

12. -g, --basic-regexp

將樣式視為基本的規則表示式解釋。(此為預設)

13. -h, --with-filename

在每個符合樣式行前加上符合的檔名稱,若有路徑會顯示路徑。

ex: (在file與testfile中搜尋panda樣式)

$grep -h panda file ./testfile

file:panda

./testfile:panda

$14. -h, --no-filename

與-h引數相類似,但在輸出時不顯示路徑。

15. --help

產生簡短的help訊息。

16. -i

grep會強制認為此二進位制檔案沒有包含任何搜尋樣式,

與--binary-files=without-match引數相同。

ex: $ grep -i panda mv

17. -i, --ignore-case

忽略大小寫,包含要搜尋的樣式及被搜尋的檔案。

ex: $ grep -i panda mv

18. -l, --files-without-match

不顯示平常一般的輸出結果,反而顯示出沒有符合的檔名稱。

19. -l, --files-with-matches

不顯示平常一般的輸出結果,只顯示符合的檔名稱。

20. --mmap

如果可能,使用mmap系統呼叫去讀取輸入,而不是預設的read系統呼叫。

在某些狀況,--mmap 能產生較好的效能。 然而,--mmap

如果運作中檔案縮短,或i/o 錯誤發生時,

可能造成未定義的行為(包含core dump),。

21. -n, --line-number

在顯示行前,標上行號。

ex: $ grep -n panda file

顯示結果相似於下:

行號:符合行的內容

22. -q, --quiet, --silent

不顯示任何的一般輸出。請參閱-s或--no-messages

23. -r, --recursive

遞迴地,讀取每個資料夾下的所有檔案,此相當於 -d recsuse 引數。

24. -s, --no-messages

不顯示關於不存在或無法讀取的錯誤訊息。

小注: 不像gnu grep,傳統的grep不符合posix.2協議,

因為缺乏-q引數,且他的-s 引數表現像gnu grep的 -q 引數。

shell script傾向將傳統的grep移植,避開-q及-s引數,

且將輸出限制到/dev/null。

posix: 定義unix及unix-like系統需要提供的功能。

25. -v, --version

顯示出grep的版本號到標準錯誤。

當您在回報有關grep的bugs時,grep版本號是必須要包含在內的。

26. -v, --invert-match

顯示除搜尋樣式行之外的全部。

27. -w, --word-regexp

將搜尋樣式視為乙個字去搜尋,完全符合該"字"的行才會被列出。

28. -x, --line-regexp

將搜尋樣式視為一行去搜尋,完全符合該"行"的行才會被列出。

linux grep命令詳解

linux grep命令 1.作用 linux系統中grep命令是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹 配的行列印出來。grep全稱是global regular expression print,表示全域性正規表示式版本,它的使用許可權是所有使用者。2.格式 grep opt...

linux grep命令詳解

linux grep命令 1.作用 linux系統中grep命令是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹 配的行列印出來。grep全稱是global regular expression print,表示全域性正規表示式版本,它的使用許可權是所有使用者。2.格式 grep opt...

linux grep命令詳解

1.作用 linux系統中grep命令是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹 配的行列印出來。grep全稱是global regular expression print,表示全域性正規表示式版本,它的使用許可權是所有使用者。2.格式 grep options 3.主要引數 o...