Linux文本三劍客之----grep的使用

awk链瓦、grep、sed是linux操作文本的三大利器盯桦,合稱文本三劍客慈俯,也是必須掌握的linux命令之一。三者的功能都是處理文本拥峦,但側(cè)重點(diǎn)各不相同贴膘,其中屬awk功能最強(qiáng)大,但也最復(fù)雜事镣。grep更適合單純的查找或匹配文本步鉴,sed更適合編輯匹配到的文本,awk更適合格式化文本璃哟,對(duì)文本進(jìn)行較復(fù)雜格式處理氛琢。

1、grep

1.1 什么是grep和egrep

Linux系統(tǒng)中g(shù)rep命令是一種強(qiáng)大的文本搜索工具随闪,它能使用正則表達(dá)式搜索文本阳似,并把匹配的行打印出來(lái)(匹配到的標(biāo)紅)。grep全稱是Global Regular Expression Print铐伴,表示全局正則表達(dá)式版本撮奏,它的使用權(quán)限是所有用戶俏讹。

1.2 使用grep

1.2.1 命令格式

grep [option] pattern file

1.2.2 命令功能

用于過(guò)濾/搜索的特定字符⌒蟮酰可使用正則表達(dá)式能多種命令配合使用泽疆,使用上十分靈活。

1.2.3 命令參數(shù)

常用參數(shù)已加粗

  • -A<顯示行數(shù)>:除了顯示符合范本樣式的那一列之外玲献,并顯示該行之后的內(nèi)容殉疼。
  • -B<顯示行數(shù)>:除了顯示符合樣式的那一行之外,并顯示該行之前的內(nèi)容捌年。
  • -C<顯示行數(shù)>:除了顯示符合樣式的那一行之外瓢娜,并顯示該行之前后的內(nèi)容。
  • -c:統(tǒng)計(jì)匹配的行數(shù)
  • -e :實(shí)現(xiàn)多個(gè)選項(xiàng)間的邏輯or 關(guān)系
  • -E:擴(kuò)展的正則表達(dá)式
  • -f FILE:從FILE獲取PATTERN匹配
  • -F :相當(dāng)于fgrep
  • -i --ignore-case #忽略字符大小寫的差別礼预。
  • -n:顯示匹配的行號(hào)
  • -o:僅顯示匹配到的字符串
  • -q: 靜默模式眠砾,不輸出任何信息
  • -s:不顯示錯(cuò)誤信息。
  • -v:顯示不被pattern 匹配到的行托酸,相當(dāng)于[^] 反向匹配
  • -w :匹配 整個(gè)單詞

1.3 grep實(shí)戰(zhàn)演示

對(duì)于本次示例的test

cat test 
aaa
bbbb
aaabbbb
AAAAaaaa
BBBBAASDADDSAaabb
cat test | grep -A2 b 
bbbb
aaabbbb
AAAAaaaa
BBBBAASDADDSAaabb

查找匹配"AAA"或者"bbb"的字段

$ cat test | grep -e AAA -e bbb
bbbb
aaabbbb
AAAAaaaa

反向匹配褒颈,查找非這段匹配的字符

$ cat test | grep -v BA
aaa
bbbb
aaabbbb
AAAAaaaa

顯示匹配到的行數(shù)

$ cat test | grep -c aa
4

2、正則表達(dá)式

2.1 認(rèn)識(shí)正則

(1)介紹

正則表達(dá)式應(yīng)用廣泛获高,在絕大多數(shù)的編程語(yǔ)言都可以完美應(yīng)用哈肖,在Linux中,也有著極大的用處念秧。

使用正則表達(dá)式,可以有效的篩選出需要的文本布疼,然后結(jié)合相應(yīng)的支持的工具或語(yǔ)言摊趾,完成任務(wù)需求。

在本篇博客中游两,我們使用grep/egrep來(lái)完成對(duì)正則表達(dá)式的調(diào)用

(2)正則表達(dá)式類型

正則表達(dá)式可以使用正則表達(dá)式引擎實(shí)現(xiàn)砾层,正則表達(dá)式引擎是解釋正則表達(dá)式模式并使用這些模式匹配文本的基礎(chǔ)軟件。

在Linux中贱案,常用的正則表達(dá)式有:

  • POSIX 基本正則表達(dá)式(BRE)引擎
  • POSIX 擴(kuò)展正則表達(dá)式(BRE)引擎

2.2 基本正則表達(dá)式

2.2.1 匹配字符

(1)格式

  • . 匹配任意單個(gè)字符肛炮,不能匹配空行
  • [] 匹配指定范圍內(nèi)的任意單個(gè)字符
  • [^] 取反
  • [:alnum:] 或 [0-9a-zA-Z]
  • [:alpha:] 或 [a-zA-Z]
  • [:upper:] 或 [A-Z]
  • [:lower:] 或 [a-z]
  • [:blank:] 空白字符(空格和制表符)
  • [:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
  • [:cntrl:] 不可打印的控制字符(退格、刪除宝踪、警鈴...)
  • [:digit:] 十進(jìn)制數(shù)字 或[0-9]
  • [:xdigit:]十六進(jìn)制數(shù)字
  • [:graph:] 可打印的非空白字符
  • [:print:] 可打印字符
  • [:punct:] 標(biāo)點(diǎn)符號(hào)

(2)演示

$ cat test
aaa
bbbb
aaabbbb
AAAAaaaa
BBBBAASDADDSAaabb
abc
123
//[

.匹配任意單個(gè)字符侨糟,不能匹配空行

$ grep . test 
aaa
bbbb
aaabbbb
AAAAaaaa
BBBBAASDADDSAaabb
abc
123
//[

[]匹配指定范圍內(nèi)的任意單個(gè)字符

$ grep [a/] test 
aaa
aaabbbb
AAAAaaaa
BBBBAASDADDSAaabb
abc
//[

[^]取反

$ grep [^abc] test
AAAAaaaa
BBBBAASDADDSAaabb
123
//[

2.2.2 配置次數(shù)

(1)格式

  • 匹配前面的字符任意次,包括0次*瘩燥,貪婪模式:盡可能長(zhǎng)的匹配
  • .* 任意長(zhǎng)度的任意字符秕重,不包括0次
  • ? 匹配其前面的字符0 或 1次
  • + 匹配其前面的字符至少1次
  • {n} 匹配前面的字符n次
  • {m,n} 匹配前面的字符至少m 次,至多n次
  • {,n} 匹配前面的字符至多n次
  • {n,} 匹配前面的字符至少n次

(2) 演示

$ cat test 
aaa
bbbb
aaabbbb
AAAAaaaa
BBBBAASDADDSAaabb
abc
123
//[
ggle
google
ggole
google
gooooooooooooooooooooooogle

匹配前面的字符任意次厉膀,包括0次

grep "g[o]*gle" test 
ggle
google
google
gooooooooooooooooooooooogle

.* 任意長(zhǎng)度的任意字符溶耘,不包括0次

 grep "g[o].*gle" test 
google
google
gooooooooooooooooooooooogle

? 匹配其前面的字符0 或 1次

grep "g[o]\?gle" test 
ggle

2.2.3 位置錨定:定位出現(xiàn)的位置

(1)格式

  • ^ 行首錨定二拐,用于模式的最左側(cè)
  • $ 行尾錨定,用于模式的最右側(cè)
  • ^PATTERN$凳兵,用于模式匹配整行
  • ^$ 空行
  • ^[[:space:]].*$ 空白行
  • < 或 \b 詞首錨定百新,用于單詞模式的左側(cè)
  • > 或 \b 詞尾錨定;用于單詞模式的右側(cè)
  • <PATTERN>

(2)演示

$ cat test 
aaa
bbbb
aaabbbb
AAAAaaaa
BBBBAASDADDSAaabb
abc
123
//[
ggle
google
ggole
google
gooooooooooooooooooooooogle

^行首錨定庐扫,匹配最左邊的字符

grep ^a test
aaa
aaabbbb
abc

$行尾錨定吟孙,匹配最右邊的字符

grep b$ test 
bbbb
aaabbbb
BBBBAASDADDSAaabb

匹配以a為首,b為結(jié)尾的語(yǔ)段

$ grep "^a.*b$" test 
aaabbbb

參考資料來(lái)源:https://www.cnblogs.com/along21/p/10366886.html

最后編輯于
?著作權(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)離奇詭異验靡,居然都是意外死亡倍宾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門胜嗓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)高职,“玉大人,你說(shuō)我怎么就攤上這事辞州≌浚” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵变过,是天一觀的道長(zhǎng)埃元。 經(jīng)常有香客問(wèn)我,道長(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)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了枣氧?” 一聲冷哼從身側(cè)響起溢十,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(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
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)埃篓。三九已至,卻和暖如春根资,著一層夾襖步出監(jiān)牢的瞬間架专,已是汗流浹背同窘。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(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