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