what:強(qiáng)大的文本搜索工具薛训,它能使用正則表達(dá)式搜索文本捏萍,并把匹配的行打印出來(lái)刘急。grep全稱是Global Regular Expression Print岖研,表示全局正則表達(dá)式版本唾戚,它的使用權(quán)限是所有用戶柳洋。
1.命令格式
grep [option] pattern file
2.命令功能
用于過(guò)濾/搜索的特定字符√咎梗可使用正則表達(dá)式熊镣。
3.常用參數(shù)
-i --ignore-case #匹配時(shí),忽略大小寫
-n --line number #顯示行號(hào)
-c --count #只顯示匹配到的文本行總數(shù)
-l --file-with-matches #只顯示匹配到文本行的文件名
-v --revert-match #顯示沒有匹配到的文本行,相當(dāng)于取反操作绪囱。
-f --file=<規(guī)則文件> #指定規(guī)則文件测蹲,其內(nèi)容含有一個(gè)或多個(gè)規(guī)則樣式,讓grep查找符合規(guī)則條件的文件內(nèi)容鬼吵,格式為每行一個(gè)規(guī)則樣式扣甲。
-s --no-messages #不顯示錯(cuò)誤信息。
4.規(guī)則表達(dá)式:
^ #錨定行的開始 如:'^grep'匹配所有以grep開頭的行齿椅。
$#錨定行的結(jié)束 如:'grep$'匹配所有以grep結(jié)尾的行琉挖。
. #匹配一個(gè)非換行符的字符 如:'gr.p'匹配gr后接一個(gè)任意字符,然后是p涣脚。
* #匹配零個(gè)或多個(gè)先前字符 如:'grep'匹配所有一個(gè)或多個(gè)空格后緊跟grep的行示辈。
.* #一起用代表任意字符。
[] #匹配一個(gè)指定范圍內(nèi)的字符遣蚀,如'[Gg]rep'匹配Grep和grep矾麻。
[^] #匹配一個(gè)不在指定范圍內(nèi)的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個(gè)字母開頭芭梯,緊跟rep的行险耀。
(..) #標(biāo)記匹配字符,如'(love)'粥帚,love被標(biāo)記為1。
< #錨定單詞的開始限次,如:'<grep'匹配包含以grep開頭的單詞的行芒涡。
> #錨定單詞的結(jié)束,如'grep>'匹配包含以grep結(jié)尾的單詞的行卖漫。
x{m} #重復(fù)字符x费尽,m次,如:'0{5}'匹配包含5個(gè)o的行羊始。
x{m,} #重復(fù)字符x,至少m次旱幼,如:'o{5,}'匹配至少有5個(gè)o的行。
x{m,n} #重復(fù)字符x突委,至少m次柏卤,不多于n次,如:'o{5,10}'匹配5--10個(gè)o的行匀油。
\w #匹配文字和數(shù)字字符缘缚,也就是[A-Za-z0-9],如:'G\wp'匹配以G后跟零個(gè)或多個(gè)文字或數(shù)字字符敌蚜,然后是p桥滨。
\W #\w的反置形式,匹配一個(gè)或多個(gè)非單詞字符,如點(diǎn)號(hào)句號(hào)等齐媒。
\b #單詞鎖定符蒲每,如: '\bgrep\b'只匹配grep。
eg:
1.查找制定進(jìn)程
ps -ef | grep "flask"
2.查找制定進(jìn)程個(gè)數(shù)
ps -ef | grep -c "flask"
3.從文件中讀取關(guān)鍵詞進(jìn)行搜索(test2為模版喻括,從test中進(jìn)行模糊查找)
cat test.txt | grep -f test2.txt
4.從文件中讀取關(guān)鍵詞進(jìn)行搜索 且顯示行號(hào)
cat test.txt | grep -nf test2.txt
5.從多個(gè)文件中查找關(guān)鍵詞
grep 'linux' test.txt test2.txt
**多文件時(shí)邀杏,輸出查詢到的信息內(nèi)容行時(shí),會(huì)把文件的命名在行最前面輸出并且加上":"作為標(biāo)示符
6.grep不顯示本身進(jìn)程
ps aux | grep ssh | grep -v "grep"
7.找出已L開頭的行內(nèi)容(-n 顯示行號(hào))
cat test.txt |grep ^L
8.輸出非L開頭的行內(nèi)容
cat test.txt |grep [L]
9.輸出以LL結(jié)尾的行內(nèi)容
cat test.txt |grep LL$
10.顯示包含LL或者ao字符的內(nèi)容行
cat test.txt |grep -E "LL|ao"
11.顯示當(dāng)前目錄下面以.txt 結(jié)尾的文件中的所有包含每個(gè)字符串至少有7個(gè)連續(xù)小寫字符的字符串的行
grep '[a-z]{7}' *.txt
12.統(tǒng)計(jì)ao行個(gè)數(shù)
grep "ao" test.txt | wc -l
grep -c "ao" test.txt
注釋:grep -c較grep | wc -l耗時(shí)更少
time grep and tmp/a/longfile.txt | wc -l
time grep -c and tmp/a/longfile.txt
帶 -c 選項(xiàng)的 grep 返回每個(gè)文件的單獨(dú)計(jì)數(shù)双妨,每行一個(gè)計(jì)數(shù)淮阐, 而針對(duì) wc 的管道則提供所有文件的組合總計(jì)數(shù)。
給予文件的grep
time cat tmp/a/longfile.txt | grep and
time grep and tmp/a/longfile.txt
后者更快