grep常用命令示例

寫在前面

grep是一個(gè)最初用于Unix操作系統(tǒng)的命令行工具。在給出文件列表或標(biāo)準(zhǔn)輸入后,grep會(huì)對(duì)匹配一個(gè)或多個(gè)正則表達(dá)式的文本進(jìn)行搜索模闲,并只輸出匹配(或者不匹配)的行或文本攀唯。

grep這個(gè)應(yīng)用程序最早由肯·湯普遜寫成。grep原先是ed下的一個(gè)應(yīng)用程序媚朦,名稱來自于g/re/p(globally search a regular expression and print氧敢,以正規(guī)表示法進(jìn)行全局查找以及打印)询张。

本文并不打算詳細(xì)介紹grep的用法孙乖,因?yàn)?code>man grep會(huì)告訴你這些細(xì)節(jié),寫本文的初衷只是記錄一下自己學(xué)習(xí)linux命令行工具的過程份氧,以及歸納一些常見用法供自己查閱唯袄。

常用實(shí)例

grep的基本語(yǔ)法:

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

以demo.txt為例

shell>cat demo.txt
THIS IS THE 1ST LINE
this is the 2nd line
This is the 3rd line


Two lines above this line is empty.
And this is the last line.

1. 在單文件中查找文本

這是最基本,也是最常用的用法蜗帜,如查找this出現(xiàn)的行:

shell>grep 'this' demo.txt
this is the 2nd line
Two lines above this line is empty.
And this is the last line.

2. 忽略大小寫匹配文本

使用-i參數(shù)恋拷,忽略(ignore)大小寫。

shell>grep -i 'this' demo.txt
THIS IS THE 1ST LINE
this is the 2nd line
This is the 3rd line
Two lines above this line is empty.
And this is the last line.

3.在多文件中匹配文本

比如厅缺,我們經(jīng)常會(huì)在工程中搜索某個(gè)類蔬顾、函數(shù)或結(jié)構(gòu)的定義,這里以beego工程目錄為例湘捎,我們要搜索Controller的定義:

shell>grep 'type Controller struct' *.go
controller.go:type Controller struct {

在controller.go文件中找到了Controller的定義诀豁。

4.遞歸目錄匹配文本

上面只是在當(dāng)前目錄下搜索多個(gè)文件,同樣的beego為例窥妇,我們想搜索Context在工程中的哪個(gè)定義中定義的, 使用-r參數(shù)舷胜,遞歸查找目錄中的文件:

shell>grep -r 'type Context struct' ./
./context/context.go:type Context struct {

有時(shí)候匹配文件可能非常多,如果只想匹配的文本在在哪些文件中秩伞,可以通過指定-l實(shí)現(xiàn)逞带,如:

shell>grep -r -l 'type Context struct' ./
./context/context.go

5.顯示匹配文本所在的行號(hào)

如果我們想知道上述例子中Context在context/context.go文件中的哪一行中定義的欺矫,可以通過-n參數(shù)指定:

shell>grep -r -n 'type Context struct' ./
./context/context.go:59:type Context struct {

6.顯示匹配行上下文信息

仍然以查找Context為例,想查看匹配行后(After)5行的信息展氓,可以通過指定-A參數(shù)實(shí)現(xiàn)

shell>grep -r -n -A 5 'type Context struct' ./
./context/context.go:59:type Context struct {
./context/context.go-60-    Input          *BeegoInput
./context/context.go-61-    Output         *BeegoOutput
./context/context.go-62-    Request        *http.Request
./context/context.go-63-    ResponseWriter *Response
./context/context.go-64-    _xsrfToken     string

同樣穆趴,想看前(Before)5行的信息,可以通過指定-B參數(shù)實(shí)現(xiàn)遇汞,如果想看匹配行前后5行的上下文(Context)信息未妹,可以通過指定-C參數(shù)實(shí)現(xiàn)。

7.在文件或標(biāo)準(zhǔn)輸入中查找不匹配的行

grep除了可以在文件中查找指定字符串或正則表達(dá)式外空入,還可以接受標(biāo)準(zhǔn)輸入络它,有時(shí)候可能想查找不匹配的行,可以通過-v參數(shù)指定歪赢。比如我們經(jīng)常會(huì)通過ps查找某個(gè)進(jìn)程是否存在化戳,比如看nginx進(jìn)程:

shell> ps -ef | grep nginx
dev   19638 18198  0 18:18 pts/1    00:00:00 grep nginx
dev   23770     1  0 Apr27 ?        00:00:00 nginx: master process nginx -p /home/dev/repos/itest/nginx/work/ -c conf/nginx.conf
dev   23771 23770  0 Apr27 ?        00:00:00 nginx: worker process

除了查找nginx進(jìn)程外,還有一個(gè)grep進(jìn)程在埋凯,這個(gè)時(shí)候我們可以通過管道再次用grep -v 'grep'把grep進(jìn)程過濾掉:

shell>ps -ef | grep nginx | grep -v 'grep'
dev   23770     1  0 Apr27 ?        00:00:00 nginx: master process nginx -p /home/dev/repos/itest/nginx/work/ -c conf/nginx.conf
dev   23771 23770  0 Apr27 ?        00:00:00 nginx: worker process

8.統(tǒng)計(jì)匹配行次數(shù)

可以通過指定-c參數(shù)實(shí)現(xiàn)点楼,比如仍以demo.txt為例,想統(tǒng)計(jì)this出現(xiàn)的行次數(shù):

shell>grep -c 'this' demo.txt
3

9.統(tǒng)計(jì)匹配文本的次數(shù)

仍然是demo.txt為例白对,我們統(tǒng)計(jì)單詞this出現(xiàn)的次數(shù)掠廓,忽略大小寫,首先需要指定-o參數(shù)查找匹配文本甩恼,再使用wc -l進(jìn)行次數(shù)統(tǒng)計(jì):

shell>grep -o -i 'this' demo.txt | wc -l
5

10.高亮顯示匹配的文本

可以通過指定--color參數(shù)實(shí)現(xiàn):

shell>grep -i 'this' --color demo.txt

小結(jié)

grep命令的用法是非常豐富的蟀瞧,其最強(qiáng)大的功能是通過與此正則表達(dá)式進(jìn)行匹配,但一涉及到正則表達(dá)式条摸,可能就引入一個(gè)新的問題——如果使用正則表達(dá)式悦污。上面的例子在日常工作中基本夠用,如果非要用到正常表式屈溉,使用一些簡(jiǎn)單的正則塞关,如^,$,.,*,+,?,[],|,{}基本能滿足絕大部分應(yīng)用場(chǎng)景。

關(guān)于grep與正則表達(dá)式的一些常見用法子巾,后續(xù)單獨(dú)再寫篇進(jìn)行歸類總結(jié)帆赢。

基本用法參數(shù)小結(jié):

參數(shù) 說明
-i 忽略大小寫
-r 遞歸查找目錄中的文件進(jìn)行文本匹配
-l 只顯示匹配文件所在的文件名
-n 顯示匹配文件所在文件的行號(hào)
-A NUM 顯示匹配文本后NUM行
-B NUM 顯示匹配文本前NUM行
-C NUM 顯示匹配文本前后NUM行
-v 反轉(zhuǎn)匹配,匹配不在指定文本的行
-o 只顯示匹配的文本
-c 統(tǒng)計(jì)匹配文本的行數(shù)
--color 高亮顯示匹配文本

更多參考

  1. https://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples/

  2. https://zh.wikipedia.org/wiki/Grep

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末线梗,一起剝皮案震驚了整個(gè)濱河市椰于,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仪搔,老刑警劉巖瘾婿,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡偏陪,警方通過查閱死者的電腦和手機(jī)抢呆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笛谦,“玉大人抱虐,你說我怎么就攤上這事〖⒛裕” “怎么了恳邀?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)灶轰。 經(jīng)常有香客問我谣沸,道長(zhǎng),這世上最難降的妖魔是什么笋颤? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任乳附,我火速辦了婚禮,結(jié)果婚禮上椰弊,老公的妹妹穿的比我還像新娘许溅。我一直安慰自己瓤鼻,他們只是感情好秉版,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茬祷,像睡著了一般清焕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祭犯,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天秸妥,我揣著相機(jī)與錄音,去河邊找鬼沃粗。 笑死粥惧,一個(gè)胖子當(dāng)著我的面吹牛芽世,可吹牛的內(nèi)容都是我干的肝劲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼崎淳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涡贱!你這毒婦竟也來了咏删?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤问词,失蹤者是張志新(化名)和其女友劉穎督函,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辰狡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年锋叨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宛篇。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悲柱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出些己,到底是詐尸還是另有隱情豌鸡,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布段标,位于F島的核電站涯冠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逼庞。R本人自食惡果不足惜蛇更,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赛糟。 院中可真熱鬧派任,春花似錦、人聲如沸璧南。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)司倚。三九已至豆混,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間动知,已是汗流浹背皿伺。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盒粮,地道東北人鸵鸥。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丹皱,于是被迫代替她去往敵國(guó)和親妒穴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • grep 多條件搜索 同時(shí)在info.log文件中搜索帶有l(wèi)ogcat.py和Thread 13962003767...
    myserendipit閱讀 304評(píng)論 0 0
  • 一.【匹配字符】 . 匹配任意單個(gè)字符 [ ] 匹配指定范圍內(nèi)的任意字符 [^] 匹配非指定范圍內(nèi)的任意...
    Andy_WYP閱讀 895評(píng)論 0 0
  • 轉(zhuǎn)自:https://www.cnblogs.com/gaojun/p/3359355.html ls命令就是li...
    xingzai閱讀 587評(píng)論 0 0
  • 在linux下面工作,有些命令能夠大大提高效率爽室。本文就向大家介紹find汁讼、grep命令淆攻,他哥倆可以算是必會(huì)的lin...
    拿破輪胎閱讀 969評(píng)論 0 4
  • 項(xiàng)目上線之后,或者在測(cè)試環(huán)境嘿架,經(jīng)常會(huì)有bug讓我們?nèi)ヅ挪楹托薷钠可海@個(gè)時(shí)候,我們需要在linux系統(tǒng)中使用一些命令幫...
    時(shí)之令閱讀 2,828評(píng)論 0 2