grep簡介
grep (global search regular expression and print out the line,全面搜尋Regex並把行列印出來)是一種強大的文本搜尋工具,它能使用Regex搜尋文本,並把匹配的行列印出來。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的擴充,支援更多的re元字元, fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,Regex中的元字元表示回其自身的字面意義,不再特殊。linux使用GNU版本的grep。它功能更強,可以通過-G、-E、-F命令列選項來使用egrep和fgrep的功能, egrep表示“grep -E”,fgrep表示“grep -F”。
grep的工作方式
grep的工作方式是這樣的,它在一個或多個檔案中搜尋字串模板。如果模板包括空格,則必須被引用,模板後的所有字串被看作檔案名稱。搜尋的結果被送到螢幕,不影響原檔案內容。grep可用於shell指令碼,因為grep通過返回一個狀態值來說明搜尋的狀態,如果模板搜尋成功,則返回0,如果搜尋不成功,則返回1,如果搜尋的檔案不存在,則返回2。我們利用這些傳回值就可進行一些自動化的文本處理工作。
grep命令格式
grep [命令選項] Pattern File
除命令本身外,包含三部分,如果不帶任何命令選項,則輸出匹配Pattern的所有行(相當於-h參數,預設)
grep命令參數
-? 同時顯示匹配行上下的?行,如:grep -2 pattern filename同時顯示匹配行的上下2行
-c, --count 只列印匹配的行數,不顯示匹配的內容
-i, --ignore-case 忽略大小寫差別
-n, --line-number 輸出匹配行並顯示行號
-l, --files-with-matches 只列印匹配的行所在的檔案名稱,即只列印匹配模板的檔案清單。
-L, --files-without-match 列印不匹配模板的檔案清單。
-I, --binary-files=without-match 明確表明不搜尋二進位檔案,比如.tar檔案
-v, --revert-match 反檢索,只顯示不匹配的行。
-f File,--file=File 從檔案中提模數板。空檔案中包含0個模板,所以什麼都不匹配。
-d, --directories=行為 指定處理目錄的方式,可以是“read”、“recurse”或者“skip”
-D, --devices=行為 指定處理裝置檔案、管道檔案和通訊端檔案的方式,可以是“read”或者“skip”
-r, -R, --recursive 等同於 --directories=recurse
-b, --byte-offset 輸出匹配行並顯示位元組位移
-q, --quiet 取消顯示,只返回退出狀態。0則表示找到了匹配的行。
-s, --silent 不顯示關於不存在或者無法讀取檔案的錯誤資訊。
-w, --word-regexp 如果被/<和/>引用,就把運算式做為一個單詞搜尋。
-V, --version 顯示軟體版本資訊
--include=模式 匹配指定的檔案將被檢查
--exclude=模式 匹配指定的檔案將被略過
--exclude-from=檔案 匹配指定中的模式的檔案將被略過
範例: