Grep(Global search REgular exPRession and Print out the line)搜索以 FILE 命名的文件輸入,或者是標準輸入,尋找含有與給定的模式 PATTERN 相匹配的內容的行,默認情況下, grep 將把含有匹配內容的行打印出來。
Grep有兩種變種程序,egrep和 fgrep,egrep就相當于 grep -E,fgrep則相當于grep -F
Synopsis
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
選項 Options
- -A num 打印出緊隨匹配的行下文的num行,在相鄰的匹配組之間用--分割
- -B num 打印出匹配行的上文的num行,在相鄰的匹配組之間用--分割
- -C num 打印出匹配行的上文和下文各num行,在相鄰的匹配組之間用--分割
- -b 在輸出匹配的行前面打印出當前行在輸入文件中的字節偏移量
- -c 只會打印出匹配行的總數,與-v聯用,為不匹配行的總數
- --color=[color] 匹配周圍的顏色標記,color可以是always,nerver,auto
- -E 擴展的正則表達式
- -F 將模式PATTERN視為一個固定的字符串的列表,用新行分隔,只要匹配其中之一即可
- -P 將模式PATTERN視為一個Perl正則表達式
- -G 將模式PATTERN視為一個基本的這則表達式,這是默認的
- -f file 從文件file中獲取模式,每行算一個模式,空文件0個模式
- -H 為每個匹配行打印文件名
- -h 當搜索多個文件的時候,禁止在輸出行前面加上文件名
- -i 忽略模式PATTERN和輸入文件中的大小寫的分別
- -a 不要忽略二進制文件
- -L 禁止通常的匹配輸出,它會輸出每個不會產生輸出的輸入文件的名字,它在對文件進行掃描時在遇到第一個匹配時停止
- -I (忽略二進制文件)禁止通常的匹配輸出,他只會輸出每個會產生輸出的輸入文件的名字,它在對文件進行掃描時在遇到第一個匹配時停止
- -m num 在找到num個匹配行之后,不在讀這個這個文件。如果輸入是來自一個普通文件的標準輸入,并且已經輸出了 num個匹配的行, grep 保證標準輸入被定位于退出時的最后一次匹配的行之后,不管是否指定了要輸出緊隨的下文的行。這樣可以使一個調用程序恢復搜索。當 grep 在 num個匹配的行之后停止,它會輸出任何緊隨的下文的行。當使用了 -c 或 --count 選項的時候, grep不會輸出比 NUM 更多的行。當指定了 -v 或 --invert-match 選項的時候, grep 會在輸出NUM 個不匹配的行之后停止。
- -n 在輸出的每行前面加上它所在文件中的行號
- -o 只顯示匹配行中與PATTERN相匹配的部分
- -q 安靜,不輸出任何東西,如果找到任何匹配的內容就會立即意以狀態值0退出
- -R,-r 遞歸讀取目錄下的所有文件
- --include=PATTERN 僅僅在搜索匹配PATTERN的文件時在目錄中遞歸搜索
- --exclude=PATTERN 在目錄中遞歸搜素,但是跳過匹配PATTERN的文件
- --exclude-dir=Path 忽律文件夾
- -V 打印grep版本號
- -v 取反,只選擇不匹配的行
基本正則表達式的元字符
.------------- 匹配任意單個字符
[]------------- 匹配指定范圍內的任意單個字符
[^]------------- 匹配指定范圍內的任意單個字符
[:lower:]------------- 所有小寫字母
[:upper:]------------- 所有大寫字母
[:alpha:]------------- 所有字母
[:alnum:]------------- 所有數字和字母
[:digit:]------------- 所有數字
[:space:]------------- 所有空白字符
[:punct:]------------- 所有標點符號
*------------- 任意次
/?------------- 0或1次
/+------------- 1或多次;
/{m/}------------- 精確限制為m次
/{m,n/}------------- 至少m次,至多n次,[m,n]
/{0,n/}------------- 至多n次
/{m,/}------------- 至少m次
^------------- 行首錨定,用于模式的最左側
$------------- 行尾錨定,用于模式的最右側
/<或者/b------------- 詞首錨定,用于表示單詞的模式的左側
/>或者/b------------- 詞尾錨定,用于表示單詞的模式的右側
^$------------- 空白行
()
|
Fgrep
就是把所有的字母都看作單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。
Egrep
egrep改良了許多傳統 grep 不能或不便的操作,如:
grep 中的?和+要寫成/?,/+, 但 egrep 不用
grep 不支持a|b或 (abc|xyz) , 但 egrep 則可以
grep 在處理次數匹配x{n,m} 時, 要用 /{ 與 /} 處理,egrep 則不用
。。。只知道這么多了,歡迎補充!