概述
- grep (global search regular expression(RE) and print out the
line,全面搜索正則表達(dá)式并把行打印出來)是一種強大的文本搜索工具倘零,它能使用正則表達(dá)式搜索文本遂黍,并把匹配的行打印出來轩勘。用于過濾/搜索的特定字符手蝎【质矗可使用正則表達(dá)式能多種命令配合使用彻桃,使用上十分靈活急但。
- grep是一個強大的文本搜索澎媒,grep是貪婪的,只要符合的都會查找出來波桩;
- grep命令格式
grep [option] "string_to_find" filename
grep常見命令
1)-i:忽略搜索字符串的大小寫
(2)-v:取反戒努,即輸出不匹配的那些文本行
(3)-n:輸出行號
(4)-l:輸出能夠匹配模式的文件名,相反的選項為-L
(5)-q:靜默輸出
選項是可選的镐躲,根據(jù)實際需求進(jìn)行選擇即可
string_to_find為需要匹配的模式储玫,可以填寫字符串或者正則表達(dá)式
filename為需要查找的文件的名稱
-a --text # 不要忽略二進(jìn)制數(shù)據(jù)。
-A <顯示行數(shù)> --after-context=<顯示行數(shù)> # 除了顯示符合范本樣式的那一行之外萤皂,并顯示該行之后的內(nèi)容撒穷。
-b --byte-offset # 在顯示符合范本樣式的那一行之外,并顯示該行之前的內(nèi)容裆熙。
-B<顯示行數(shù)> --before-context=<顯示行數(shù)> # 除了顯示符合樣式的那一行之外端礼,并顯示該行之前的內(nèi)容禽笑。
-c --count # 計算符合范本樣式的列數(shù)。
-C<顯示行數(shù)> --context=<顯示行數(shù)>或-<顯示行數(shù)> # 除了顯示符合范本樣式的那一列之外蛤奥,并顯示該列之前后的內(nèi)容佳镜。
-d<進(jìn)行動作> --directories=<動作> # 當(dāng)指定要查找的是目錄而非文件時,必須使用這項參數(shù)凡桥,否則grep命令將回報信息并停止動作蟀伸。
-e<范本樣式> --regexp=<范本樣式> # 指定字符串作為查找文件內(nèi)容的范本樣式。
-E --extended-regexp # 將范本樣式為延伸的普通表示法來使用唬血,意味著使用能使用擴(kuò)展正則表達(dá)式望蜡。
-f<范本文件> --file=<規(guī)則文件> # 指定范本文件,其內(nèi)容有一個或多個范本樣式拷恨,讓grep查找符合范本條件的文件內(nèi)容,格式為每一列的范本樣式谢肾。
-F --fixed-regexp # 將范本樣式視為固定字符串的列表腕侄。
-G --basic-regexp # 將范本樣式視為普通的表示法來使用。
-h --no-filename # 在顯示符合范本樣式的那一列之前芦疏,不標(biāo)示該列所屬的文件名稱冕杠。
-H --with-filename # 在顯示符合范本樣式的那一列之前,標(biāo)示該列的文件名稱酸茴。
-i --ignore-case # 忽略字符大小寫的差別分预。
-l --file-with-matches # 列出文件內(nèi)容符合指定的范本樣式的文件名稱。
-L --files-without-match # 列出文件內(nèi)容不符合指定的范本樣式的文件名稱薪捍。
-n --line-number # 在顯示符合范本樣式的那一列之前笼痹,標(biāo)示出該列的編號。
-q --quiet或--silent # 不顯示任何信息酪穿。
-R/-r --recursive # 此參數(shù)的效果和指定“-d recurse”參數(shù)相同凳干。
-s --no-messages # 不顯示錯誤信息。
-v --revert-match # 反轉(zhuǎn)查找被济。
-V --version # 顯示版本信息救赐。
-w --word-regexp # 只顯示全字符合的列。
-x --line-regexp # 只顯示全列符合的列只磷。
-y # 此參數(shù)效果跟“-i”相同经磅。
-o # 只輸出文件中匹配到的部分。
grep常見命令
- 在文件中搜索一個單詞钮追,命令會返回一個包含 “match_pattern” 的文本行:
grep match_pattern file_name
grep "match_pattern" file_name
grep "match_pattern" file_1 file_2 file_3 ...
- 輸出除match_pattern之外的所有行 -v 選項:
grep -v "match_pattern" file_name
- 標(biāo)記匹配顏色 --color=auto 選項:
grep "match_pattern" file_name --color=auto
grep -E "[1-9]+"
或
egrep "[1-9]+"
echo this is a test line. | grep -o -E "[a-z]+\." line.
echo this is a test line. | egrep -o "[a-z]+\." line.
- 統(tǒng)計文件或者文本中包含匹配字符串的行數(shù)-c 選項:
grep -c "text" file_name
grep "text" -n file_name
或
cat file_name | grep "text" -n
#多個文件
grep "text" -n file_1 file_2
echo gun is not unix | grep -b -o "not" 7:not
#一行中字符串的字符偏移是從該行的第一個字符開始計算预厌,起始值為0。選項 **-b -o** 一般總是配合使用畏陕。
grep -l "text" file1 file2 file3...
在多級目錄中對文本進(jìn)行遞歸搜索:
grep "text" . -r -n # .表示當(dāng)前目錄配乓。
echo "hello world" | grep -i "HELLO" hello
echo this is a text line | grep -e "is" -e "line" -o is line
#也可以使用 -f選項來匹配多個樣式,在樣式文件中逐行寫出需要匹配的字符。
cat patfile aaa bbb echo aaa bbb ccc ddd eee | grep -f patfile -o
- 在grep搜索結(jié)果中包括或者排除指定文件:
#只在目錄中所有的.php和.html文件中遞歸搜索字符"main()"
grep "main()" . -r --include *.{php,html}
#在搜索結(jié)果中排除所有README文件
grep "main()" . -r --exclude "README"
#在搜索結(jié)果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
- 使用0值字節(jié)后綴的grep與xargs:
# 測試文件:
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3
grep "aaa" file* -lZ | xargs -0 rm
#執(zhí)行后會刪除file1和file3犹芹,grep輸出用-Z選項來指定以0值字節(jié)作為終結(jié)符文件名(\0)崎页,xargs -0 讀取輸入并用0值字節(jié)終結(jié)符分隔文件名,然后刪除匹配文件腰埂,-Z通常和-l結(jié)合使用飒焦。
grep -q "test" filename
# 不會輸出任何信息,如果命令運行成功返回0屿笼,失敗則返回非0值牺荠。一般用于條件測試。
#顯示匹配某個結(jié)果之后的3行驴一,使用 -A 選項:
seq 10 | grep "5" -A 3
參考博客
shell中g(shù)rep的用法
shell中g(shù)rep命令及常用語法