Linux筆記13-grep的用法

grep介紹

  • Linux系統(tǒng)中g(shù)rep命令是一種強(qiáng)大的文本搜索工具迟郎,它能使用正則表達(dá)式搜索文本泣特,并把匹 配的行打印出來产还。grep全稱是Global Regular Expression Print讶请,表示全局正則表達(dá)式版本,它的使用權(quán)限是所有用戶宣蠕。

  • grep的工作方式是這樣的,它在一個(gè)或多個(gè)文件中搜索字符串模板甥捺。如果模板包括空格抢蚀,則必須被引用,模板后的所有字符串被看作文件名镰禾。搜索的結(jié)果被送到標(biāo)準(zhǔn)輸出皿曲,不影響原文件內(nèi)容唱逢。

  • grep可用于shell腳本,因?yàn)間rep通過返回一個(gè)狀態(tài)值來說明搜索的狀態(tài)屋休,如果模板搜索成功坞古,則返回0,如果搜索不成功博投,則返回1绸贡,如果搜索的文件不存在,則返回2毅哗。我們利用這些返回值就可進(jìn)行一些自動(dòng)化的文本處理工作听怕。

  • grep命令格式:grep [option] pattern file

  • 命令功能:用于過濾/搜索的特定字符÷敲啵可使用正則表達(dá)式能多種命令配合使用尿瞭,使用上十分靈活。


grep參數(shù):

-a   --text   #不要忽略二進(jìn)制的數(shù)據(jù)翅睛。   
-A<顯示列數(shù)>   --after-context=<顯示列數(shù)>   #除了顯示符合范本樣式的那一列之外声搁,并顯示該列之后的內(nèi)容。   
-b   --byte-offset   #在顯示符合樣式的那一列之前捕发,標(biāo)示出該列第一個(gè)字符的編號(hào)疏旨。   
-B<顯示列數(shù)>   --before-context=<顯示列數(shù)>   #除了顯示符合樣式的那一列之外,并顯示該列之前的內(nèi)容扎酷。   
-c    --count   #計(jì)算符合樣式的列數(shù)檐涝。   
-C<顯示列數(shù)>    --context=<顯示列數(shù)>或-<顯示列數(shù)>   #除了顯示符合樣式的那一列之外,并顯示該列之前后的內(nèi)容法挨。   
-d <動(dòng)作>      --directories=<動(dòng)作>   #當(dāng)指定要查找的是目錄而非文件時(shí)谁榜,必須使用這項(xiàng)參數(shù),否則grep指令將回報(bào)信息并停止動(dòng)作凡纳。   
-e<范本樣式>  --regexp=<范本樣式>   #指定字符串做為查找文件內(nèi)容的樣式窃植。   
-E      --extended-regexp   #將樣式為延伸的普通表示法來使用。   
-f<規(guī)則文件>  --file=<規(guī)則文件>   #指定規(guī)則文件荐糜,其內(nèi)容含有一個(gè)或多個(gè)規(guī)則樣式巷怜,讓grep查找符合規(guī)則條件的文件內(nèi)容,格式為每列一個(gè)規(guī)則樣式暴氏。   
-F   --fixed-regexp   #將樣式視為固定字符串的列表丛版。   
-G   --basic-regexp   #將樣式視為普通的表示法來使用。   
-h   --no-filename   #在顯示符合樣式的那一列之前偏序,不標(biāo)示該列所屬的文件名稱页畦。   
-H   --with-filename   #在顯示符合樣式的那一列之前,表示該列所屬的文件名稱研儒。   
-i    --ignore-case   #忽略字符大小寫的差別豫缨。   
-l    --file-with-matches   #列出文件內(nèi)容符合指定的樣式的文件名稱独令。   
-L   --files-without-match   #列出文件內(nèi)容不符合指定的樣式的文件名稱。   
-n   --line-number   #在顯示符合樣式的那一列之前好芭,標(biāo)示出該列的列數(shù)編號(hào)燃箭。   
-q   --quiet或--silent   #不顯示任何信息。   
-r   --recursive   #此參數(shù)的效果和指定“-d recurse”參數(shù)相同舍败。   
-s   --no-messages   #不顯示錯(cuò)誤信息招狸。   
-v   --revert-match   #顯示不包含匹配文本的所有行。   
-V   --version   #顯示版本信息邻薯。   
-w   --word-regexp   #只顯示全字符合的列裙戏。   
-x    --line-regexp   #只顯示全列符合的列。   
-y   #此參數(shù)的效果和指定“-i”參數(shù)相同厕诡。

grep的規(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\w*p'匹配以G后跟零個(gè)或多個(gè)文字或數(shù)字字符慢叨,然后是p纽匙。   
\W    #\w的反置形式,匹配一個(gè)或多個(gè)非單詞字符拍谐,如點(diǎn)號(hào)句號(hào)等烛缔。   
\b    #單詞鎖定符,如: '\bgrep\b'只匹配grep轩拨。  

使用實(shí)例:

實(shí)例1:查找指定進(jìn)程
  • 命令:
ps -ef|grep svn
  • 輸出:
[root@localhost ~] ps -ef|grep svn
root 4943   1      0  Dec05 ?   00:00:00 svnserve -d -r /opt/svndata/grape/
root 16867 16838  0 19:53 pts/0    00:00:00 grep svn
  • 說明:第一條記錄是查找出的進(jìn)程践瓷;第二條結(jié)果是grep進(jìn)程本身,并非真正要找的進(jìn)程气嫁。

實(shí)例2:查找指定進(jìn)程個(gè)數(shù)
  • 命令:
ps -ef|grep svn -c
ps -ef|grep -c svn
  • 輸出:
[root@localhost ~] ps -ef|grep svn -c
2
[root@localhost ~] ps -ef|grep -c svn 
2
  • 說明:

實(shí)例3:從文件中讀取關(guān)鍵詞進(jìn)行搜索
  • 命令:
grep -f test.txt test2.txt

輸出:

[root@localhost test] cat test.txt 
hnlinux
peida.cnblogs.com
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test] cat test2.txt 
linux
Redhat
[root@localhost test] grep -f test.txt test2.txt
hnlinux
ubuntu linux
Redhat
linuxmint

說明:輸出test.txt文件中含有從test2.txt文件中讀取出的關(guān)鍵詞的內(nèi)容行


實(shí)例4:從文件中讀取關(guān)鍵詞進(jìn)行搜索 且顯示行號(hào)

命令:

cat test.txt | grep -nf test2.txt

輸出:

[root@localhost test]# cat test.txt 
hnlinux
peida.cnblogs.com
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test] cat test2.txt 
linux
Redhat
[root@localhost test] cat test.txt | grep -nf test2.txt
1:hnlinux
4:ubuntu linux
6:Redhat
7:linuxmint

說明:輸出test.txt文件中含有從test2.txt文件中讀取出的關(guān)鍵詞的內(nèi)容行当窗,并顯示每一行的行號(hào)


實(shí)例5:從文件中查找關(guān)鍵詞
  • 命令:grep 'linux' test.txt
  • 輸出:
[root@localhost test]# grep 'linux' test.txt 
hnlinux
ubuntu linux
linuxmint
[root@localhost test]# grep -n 'linux' test.txt 
1:hnlinux
4:ubuntu linux
7:linuxmint
  • 說明:

實(shí)例6:從多個(gè)文件中查找關(guān)鍵詞
  • 命令:
grep 'linux' test.txt test2.txt
  • 輸出:
[root@localhost test]# grep -n 'linux' test.txt test2.txt 
test.txt:1:hnlinux
test.txt:4:ubuntu linux
test.txt:7:linuxmint
test2.txt:1:linux
[root@localhost test]# grep 'linux' test.txt test2.txt 
test.txt:hnlinux
test.txt:ubuntu linux
test.txt:linuxmint
test2.txt:linux
  • 說明:多文件時(shí),輸出查詢到的信息內(nèi)容行時(shí)寸宵,會(huì)把文件的命名在行最前面輸出并且加上":"作為標(biāo)示符

實(shí)例7:找出已u開頭的行內(nèi)容
  • 命令:
cat test.txt |grep ^u
  • 輸出:
[root@localhost test]# cat test.txt |grep ^u
ubuntu
ubuntu linux
  • 說明:

實(shí)例8:輸出非u開頭的行內(nèi)容
  • 命令:
cat test.txt |grep ^[^u]
  • 輸出:
[root@localhost test]# cat test.txt |grep ^[^u]
hnlinux
peida.cnblogs.com
redhat
Redhat
linuxmint
  • 說明:

實(shí)例9:輸出以hat結(jié)尾的行內(nèi)容
  • 命令:
cat test.txt |grep hat$
  • 輸出:
[root@localhost test]# cat test.txt |grep hat$
redhat
Redhat
  • 說明:

實(shí)例10:顯示當(dāng)前目錄下面以.txt 結(jié)尾的文件中的所有包含每個(gè)字符串至少有7個(gè)連續(xù)小寫字符的字符串的行
  • 命令:
grep '[a-z]\{7\}' *.txt
  • 輸出:
[root@localhost test]# grep '[a-z]\{7\}' *.txt
test.txt:hnlinux
test.txt:peida.cnblogs.com
test.txt:linuxmint
  • 說明:

參考

https://blog.csdn.net/u012787436/article/details/39722129

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末崖面,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子梯影,更是在濱河造成了極大的恐慌巫员,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甲棍,死亡現(xiàn)場(chǎng)離奇詭異简识,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)感猛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門七扰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陪白,你說我怎么就攤上這事颈走。” “怎么了咱士?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵立由,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我序厉,道長(zhǎng)锐膜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任弛房,我火速辦了婚禮道盏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己捞奕,他們只是感情好牺堰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颅围,像睡著了一般伟葫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上院促,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天筏养,我揣著相機(jī)與錄音,去河邊找鬼常拓。 笑死渐溶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弄抬。 我是一名探鬼主播茎辐,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掂恕!你這毒婦竟也來了拖陆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤懊亡,失蹤者是張志新(化名)和其女友劉穎依啰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體店枣,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡速警,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸯两。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闷旧。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钧唐,靈堂內(nèi)的尸體忽然破棺而出忙灼,到底是詐尸還是另有隱情,我是刑警寧澤逾柿,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站宅此,受9級(jí)特大地震影響机错,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜父腕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一弱匪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦萧诫、人聲如沸斥难。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哑诊。三九已至,卻和暖如春及刻,著一層夾襖步出監(jiān)牢的瞬間镀裤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工缴饭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暑劝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓颗搂,卻偏偏與公主長(zhǎng)得像担猛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丢氢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345