grep 用法

https://www.zsythink.net/archives/1733

我們可以使用grep命令在文本中查找指定的字符串,可以把grep理解成字符查找工具兰吟。

[root@centos7 tmp]# grep "zabbix" /etc/passwd
zabbix:x:988:982:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin

默認情況下,grep是區(qū)分大小寫的,使用 -i 選項搜索時忽略大小寫渗鬼。

[root@centos7 tmp]# grep -i "zabbix" /etc/passwd
zabbix:x:988:982:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
ZAbbix:x:1058:1058::/home/ZAbbix:/bin/bash

如果我們想確定zabbix用戶在passwd文件的第一行弹沽,使用-n選項弄痹,顯示文本所在行號翼馆。

[root@centos7 tmp]# grep -i -n "zabbix" /etc/passwd
46:zabbix:x:988:982:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
50:ZAbbix:x:1058:1058::/home/ZAbbix:/bin/bash

如果想知道文件中有多少行包含了指定字符串奈搜,使用-c選項可只統(tǒng)計符號條件的行义钉,而不打印出來。

[root@centos7 tmp]# grep -i -c 'zabbix' /etc/passwd
2

如果我們只想看到被匹配的關鍵字氓英,而不是把關鍵字所在的整行都打印出來侯勉,使用-o選項,但是需要注意,-o選項會把每個匹配到的關鍵字都單獨顯示在一行中進行輸出债蓝。

[root@centos7 tmp]# grep -i -o -n 'zabbix' /etc/passwd
46:zabbix
46:Zabbix
46:zabbix
50:ZAbbix
50:ZAbbix

顯示關鍵字附件的信息 -A after -B before -C content

[root@centos7 tmp]# grep -B2 'zhangsan' /etc/passwd
zabbix:x:988:982:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
grafana:x:987:981:grafana user:/usr/share/grafana:/sbin/nologin
zhangsan:x:800:1059:AdminUser:/tmp/zhangsan:/bin/sh

[root@centos7 tmp]# grep -A2 'zhangsan' /etc/passwd
zhangsan:x:800:1059:AdminUser:/tmp/zhangsan:/bin/sh
oldboy:x:1057:1057::/home/oldboy:/bin/bash
ZAbbix:x:1058:1058::/home/ZAbbix:/bin/bash

[root@centos7 tmp]# grep -C1 'zhangsan' /etc/passwd
grafana:x:987:981:grafana user:/usr/share/grafana:/sbin/nologin
zhangsan:x:800:1059:AdminUser:/tmp/zhangsan:/bin/sh
oldboy:x:1057:1057::/home/oldboy:/bin/bash

如果我們需求精確匹配壳鹤,就是搜索的關鍵字作為一個獨立的單詞存在,而不是包含在某個字符串中饰迹,使用-w選項芳誓,這時候nologin就沒有被匹配到。

[root@centos7 tmp]# grep -w 'login' /etc/passwd
zhangsan:x:1058:1058::/home/zhangsan:/bin/login

如果想取反啊鸭,就是查找不包含指定字符串的行锹淌,使用-v選項。

[root@centos7 tmp]# grep -v -i -n 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
48:oldboy:x:1057:1057::/home/oldboy:/bin/bash
49:zhangsan:x:1058:1058::/home/zhangsan:/bin/login

如果想同時匹配多個目標赠制,使用-e選項赂摆,他們之間是“或”的關系。

[root@centos7 tmp]# grep -e 'zhang'  -e 'zabbix' /etc/passwd
zabbix:x:988:982:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
zhangsan:x:1058:1058::/home/zhangsan:/bin/login

如果只是想利用grep判斷文本中是否包含某個字符串钟些,你只關心有沒有匹配到烟号,而不想輸出,可以使用-q選項政恍,開啟靜默模式汪拥。

[root@centos7 tmp]# grep -q 'zhang'  /etc/passwd
[root@centos7 tmp]# echo $?
0

[root@centos7 tmp]# grep -q -w 'zhang'  /etc/passwd
[root@centos7 tmp]# echo $?
1

掌握以上用法,基礎的就夠了篙耗,等學習了“正則表達式”迫筑,再回來結合一起發(fā)揮威力。

grep用法總結:

-i:在搜索的時候忽略大小寫
-n:顯示結果所在行號
-c:統(tǒng)計匹配到的行數宗弯,注意脯燃,是匹配到的總行數,不是匹配到的次數
-o:只顯示符合條件的字符串蒙保,但是不整行顯示辕棚,每個符合條件的字符串單獨顯示一行
-v:輸出不帶關鍵字的行(反向查詢,反向匹配)
-w:匹配整個單詞邓厕,如果是字符串中包含這個單詞逝嚎,則不作匹配
-Ax:在輸出的時候包含結果所在行之后的指定行數,這里指之后的x行邑狸,A:after
-Bx:在輸出的時候包含結果所在行之前的指定行數懈糯,這里指之前的x行,B:before
-Cx:在輸出的時候包含結果所在行之前和之后的指定行數单雾,這里指之前和之后的x行赚哗,C:context
-e:實現多個選項的匹配,邏輯or關系
-q:靜默模式硅堆,不輸出任何信息屿储,當我們只關心有沒有匹配到,卻不關心匹配到什么內容時渐逃,我們可以使用此命令够掠,然后,使用”echo $?”查看是否匹配到茄菊,0表示匹配到疯潭,1表示沒有匹配到赊堪。
-P:表示使用兼容perl的正則引擎。
-E:使用擴展正則表達式竖哩,而不是基本正則表達式哭廉,在使用”-E”選項時,相當于使用egrep相叁。

grep結合正則表達式

字符類 [ ] 括號內的僅匹配其中一個字符
如果我想要搜尋 test 或 taste 這兩個單字時遵绰,可以發(fā)現到,其實她們有共通的 't?st'

[root@centos7 tmp]# grep -n 't[ae]st' test
2:i can't finish the test
3:oh! the soup taste good!!!

字符類的反向選擇 [^]
連續(xù)字符 [a-zA-Z0-9]

[root@centos7 tmp]# cat test
abc#123#def#456
i can't finish the test
oh! the soup taste good!!!
football game is not use feet only
gooooood bye!
google is the best tools for search keyword

如果想要搜索到有 oo 的行增淹,但不想要 oo 前面有 g
[root@centos7 tmp]# grep -n  '[^g]oo' test
4:football game is not use feet only
5:gooooood bye!
6:google is the best tools for search keyword
我們發(fā)現把google也搜索出來了椿访,這好像和我們的預期不符合,為什么呢虑润?因為后面有符號的tools,所以這一行也是符號的成玫。

如果不想oo之前出現小寫字母
[root@centos7 tmp]# grep -n '[^a-z]oo' test
4:Football game is not use feet only

匹配行首 ^
結合[]時要注意^的位置
匹配行尾 $

[root@centos7 tmp]# grep -n  '^i' test
2:i can't finish the test

[root@centos7 tmp]# grep -n  '^[A-Z]' test
4:Football game is not use feet only

匹配不是以字母開頭的行,注意^的位置,在 [] 內代表『反向選擇』端辱,在 [] 之外則代表定位在行首的意義
[root@centos7 tmp]# grep '^[^a-zA-Z]' test
222abc#123#def#456
555 gooooood bye!


[root@centos7 tmp]# grep -n  'd$' test
3:oh! the soup taste good
6:google is the best tools for search keyword

如果想找出以 . 結尾的行梁剔,因為 . 具有其他含義,必須轉義\.
[root@centos7 tmp]# grep '\.$' test
oh! the soup taste good.
google is the best tools for search keyword.

找出空白行使用  grep  '^$'

我們來看 . 和 * 在正則中的含義
. 表示任意一個字符
星號*表示重復他前面的字符0次到無窮多次

[root@centos7 tmp]# grep 'g..d' test
oh! the soup taste good.

好好折磨下面這個示例舞蔽,*號前面的o可以出現0次荣病,也可以出現多次
[root@centos7 tmp]# grep 'ooo*' test
oh! the soup taste good.
Football game is not use feet only
555 gooooood bye!
google is the best tools for search keyword.

[root@centos7 tmp]# grep 'goo*d' test
oh! the soup taste good.
555 gooooood bye!

[root@centos7 tmp]# grep 'g.*d' test
oh! the soup taste good.
555 gooooood bye!
google is the best tools for search keyword.

慢慢品味區(qū)別
[root@centos7 tmp]# grep '[0-9]*' test
222abc#123#def#456
i can't finish the test
oh! the soup taste good.
Football game is not use feet only
555 gooooood bye!
google is the best tools for search keyword.

[root@centos7 tmp]# grep '[0-9][0-9]*' test
222abc#123#def#456
555 gooooood bye!

限定范圍的字符{} ,但因為 { 與 } 的符號在 shell 是有特殊意義的,因此渗柿, 我們必須要使用字符 \ 來讓他失去特殊意義才行个盆。

假設我要找到兩個 o 的字串
[root@centos7 tmp]# grep 'o\{2\}'  test
oh! the soup taste good.
Football game is not use feet only
555 gooooood bye!
google is the best tools for search keyword.

假設我們要找出 g 后面接 2 到 5 個 o ,然后再接一個 d的字符串
[root@centos7 tmp]# grep 'go\{2,5\}d'  test
oh! the soup taste good.
goooood bye!
goodle is the best tools for search keyword.

[root@centos7 tmp]# grep 'go\{2,\}d'  test

使用擴展grep -E

[root@centos7 tmp]# free -h | egrep 'Mem|Swap'
Mem:           7.8G        3.5G        1.4G        231M        2.9G        3.7G
Swap:          6.0G        264K        6.0G

如果使用grep將沒有東西輸出朵栖,如果在擴展元字符前面加\颊亮,grep會自動啟用擴展選項-E。
[root@centos7 tmp]# free -h | grep 'Mem|Swap'
[root@centos7 tmp]# free -h | grep 'Mem\|Swap'
Mem:           7.8G        3.5G        1.4G        231M        2.9G        3.7G
Swap:          6.0G        264K        6.0G

搜索包含一個或多個字母o的行
[root@centos7 tmp]# egrep 'o+' test
oh! the soup taste good.
Football game is not use feet only
goooood bye!
goodle is the best tools for search keyword.

[root@centos7 tmp]# grep -E 'o+'  test
oh! the soup taste good.
Football game is not use feet only
goooood bye!
goodle is the best tools for search keyword.

[root@centos7 tmp]# grep  'o\+'  test
oh! the soup taste good.
Football game is not use feet only
goooood bye!
goodle is the best tools for search keyword.

搜索所有包含0個或1個數字的行陨溅。
[root@centos7 tmp]# egrep '2\.?[0-9]' test
222abc#123#def#456

[root@centos7 tmp]# grep -E  '(go)+' test
oh! the soup taste good.
goooood bye!
goodle is the best tools for search keyword.

fgrep 查詢速度比grep命令快终惑,但是不夠靈活:它只能找固定的文本,而不是規(guī)則表達式门扇。
在文本中找出包含#的行

[root@centos7 tmp]# grep -F '#' test
222abc#123#def#456
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末雹有,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子臼寄,更是在濱河造成了極大的恐慌霸奕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吉拳,死亡現場離奇詭異质帅,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門煤惩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫉嘀,“玉大人,你說我怎么就攤上這事盟庞〕曰Γ” “怎么了汤善?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵什猖,是天一觀的道長。 經常有香客問我红淡,道長不狮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任在旱,我火速辦了婚禮摇零,結果婚禮上,老公的妹妹穿的比我還像新娘桶蝎。我一直安慰自己驻仅,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布登渣。 她就那樣靜靜地躺著噪服,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胜茧。 梳的紋絲不亂的頭發(fā)上粘优,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音呻顽,去河邊找鬼雹顺。 笑死,一個胖子當著我的面吹牛廊遍,可吹牛的內容都是我干的嬉愧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼喉前,長吁一口氣:“原來是場噩夢啊……” “哼没酣!你這毒婦竟也來了?” 一聲冷哼從身側響起被饿,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤四康,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狭握,有當地人在樹林里發(fā)現了一具尸體闪金,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了哎垦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囱嫩。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漏设,靈堂內的尸體忽然破棺而出墨闲,到底是詐尸還是另有隱情,我是刑警寧澤郑口,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布鸳碧,位于F島的核電站,受9級特大地震影響犬性,放射性物質發(fā)生泄漏瞻离。R本人自食惡果不足惜乒裆,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹤耍。 院中可真熱鬧肉迫,春花似錦稿黄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽财著。三九已至联四,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工嫂伞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氓仲,地道東北人师抄。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鹿霸,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容