Shell編程之正則表達(dá)式三劍客——grep,egrep

正則表達(dá)式概述

正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來表達(dá)對(duì)字符串的一種過濾邏輯。

創(chuàng)新互聯(lián)專注于雞西梨樹企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開發(fā)。雞西梨樹網(wǎng)站建設(shè)公司,為雞西梨樹等地區(qū)提供建站服務(wù)。全流程按需求定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

基礎(chǔ)正則表達(dá)式

正則表達(dá)式的字符串表達(dá)方法根據(jù)不同的嚴(yán)謹(jǐn)程度與功能分為基本正則表達(dá)式與擴(kuò)展正則表達(dá)式?;A(chǔ)正則表達(dá)式是常用的正則表達(dá)式的最基礎(chǔ)的部分。在 Linux 系統(tǒng)中常見的文件處理工具中 grep 與 sed 支持基礎(chǔ)正則表達(dá)式,而 egrep 與 awk 支持?jǐn)U展正則表達(dá)式。

基礎(chǔ)正則表達(dá)式示例

以httpd服務(wù)的配置文件為例(/etc/httpd/conf/httpd.conf)
1)查找特定字符
-n:顯示行號(hào)  -i:不區(qū)分大小寫
查找出目標(biāo)文件中帶有“the”的字符
[root@localhost conf]# grep -n 'the' httpd.conf

Shell編程之正則表達(dá)式三劍客——grep,egrep

若反向查找,查找不包含“the”字符的行,則需要通過“-vn”選項(xiàng)實(shí)現(xiàn)
[root@localhost conf]# grep -vn 'the' httpd.conf

Shell編程之正則表達(dá)式三劍客——grep,egrep

2)利用中括號(hào)“[ ]”來查找集合字符(先創(chuàng)建一個(gè)自定義的文本文件a.txt)
想要查找“shirt”與“short”這兩個(gè)字符串時(shí),可以發(fā)現(xiàn)這兩個(gè)字符串均包含“sh” 與“rt”。此時(shí)執(zhí)行以下命令即可同時(shí)查找到“shirt”與“short”這兩個(gè)字符串?!癧]”中無論有幾個(gè)字符,都僅代表一個(gè)字符,也就是說“[io]”表示匹配“i”或者“o”。

#a.txt實(shí)驗(yàn)文本
short
shirt
oo
tools
wood
woooooood
Wood
the football
this the web
123123
456456.
[root@localhost ~]# grep -n 'sh[io]rt' a.txt

Shell編程之正則表達(dá)式三劍客——grep,egrep

若要查找包含重復(fù)單個(gè)字符“oo”時(shí),只需要執(zhí)行以下命令即可
[root@localhost ~]# grep -n 'oo' a.txt

Shell編程之正則表達(dá)式三劍客——grep,egrep

若查找“oo”前面不是“w”的字符串,只需要通過集合字符的反向選擇“[^]”來實(shí)現(xiàn)該目的

[root@localhost ~]# grep -n '[^w]oo' a.txt

Shell編程之正則表達(dá)式三劍客——grep,egrep

在上述命令的執(zhí)行結(jié)果中發(fā)現(xiàn)“wooooood”也符合匹配規(guī)則,包含“w”。其實(shí)通過執(zhí)行結(jié)果就可以看出,符合匹配標(biāo)準(zhǔn)的字符加粗顯示,而上述結(jié)果中可以得知,“#wooooood #”中加粗顯示的是“oooooo”,而“oo”前面的“o”是符合匹配規(guī)則的。

若不希望“oo”前面存在小寫字母a-z A-Z 數(shù)字0-9
[root@localhost ~]# grep -n '[^a-z]oo' a.txt

Shell編程之正則表達(dá)式三劍客——grep,egrep

3)查找行首“^”與行尾字符“$”
基礎(chǔ)正則表達(dá)式包含兩個(gè)定位元字符:“^”(行首)與“$”(行尾)。在上面的示例中,查詢“the”字符串時(shí)出現(xiàn)了很多包含“the”的行,如果想要查詢以“the”字符串為行首的行,則可以通過“^”元字符來實(shí)現(xiàn)。

[root@localhost ~]# grep -n '^the' test.txt

Shell編程之正則表達(dá)式三劍客——grep,egrep

查詢以小寫字母開頭的行可以通過“^[a-z]”規(guī)則來過濾,查詢大寫字母開頭的行則使用“^[A-Z]”規(guī)則,若查詢不以字母開頭的行則使用“^[^a-zA-Z]”規(guī)則。

[root@localhost ~]# grep -n '^[^a-zA-Z]'  a.txt

Shell編程之正則表達(dá)式三劍客——grep,egrep

“^”符號(hào)在元字符集合“[]”符號(hào)內(nèi)外的作用是不一樣的,在“[]”符號(hào)內(nèi)表示反向選擇,在“[]”符號(hào)外則代表定位行首。反之,若想查找以某一特定字符結(jié)尾的行則可以使用“$”定位符。例如,執(zhí)行以下命令即可實(shí)現(xiàn)查詢以小數(shù)點(diǎn)(.)結(jié)尾的行。因?yàn)樾?shù)點(diǎn)(.) 在正則表達(dá)式中也是一個(gè)元字符(后面會(huì)講到),所以在這里需要用轉(zhuǎn)義字符“\”將具有特 殊意義的字符轉(zhuǎn)化成普通字符。空行使用^$即可。

[root@localhost ~]# grep -n '\.$' a.txt 

Shell編程之正則表達(dá)式三劍客——grep,egrep

4)查找任意一個(gè)字符“.”與重復(fù)字符“*”
前面提到,在正則表達(dá)式中小數(shù)點(diǎn)(.)也是一個(gè)元字符,代表任意一個(gè)字符。例如, 執(zhí)行以下命令就可以查找“w??d”的字符串,即共有四個(gè)字符,以 w 開頭 d 結(jié)尾。

Shell編程之正則表達(dá)式三劍客——grep,egrep

在上述結(jié)果中,“wood”字符串“w..d”匹配規(guī)則。若想要查詢 oo、ooo、ooooo 等資料,則需要使用星號(hào)()元字符。但需要注意的是,“”代表的是重復(fù)零個(gè)或多個(gè)前面的單字符。

[root@localhost ~]# grep -n 'oo*' a.txt 

Shell編程之正則表達(dá)式三劍客——grep,egrep

查詢以 w 開頭 d 結(jié)尾,中間的字符可有可無的字符串。
[root@localhost ~]# grep -n 'w.d' a.txt
查詢?nèi)我鈹?shù)字所在行。
[root@localhost ~]# grep -n '[0-9][0-9]
' a.txt

5)查找連續(xù)字符范圍“{}”

查詢以 w 開頭以 d 結(jié)尾,中間包含 2~5 個(gè) o 的字符串。
[root@localhost ~]# grep -n 'wo{2,5}d' a.txt
查詢以 w 開頭以 d 結(jié)尾,中間包含 2 個(gè) o 以上的字符串。
[root@localhost ~]# grep -n 'wo{2,}d' a.txt

Shell編程之正則表達(dá)式三劍客——grep,egrep

元字符總結(jié)

常見的基礎(chǔ)正則表達(dá)式的元字符主要包括以下幾個(gè)

Shell編程之正則表達(dá)式三劍客——grep,egrep

擴(kuò)展正則表達(dá)式

通常情況下會(huì)使用基礎(chǔ)正則表達(dá)式就已經(jīng)足夠了,但有時(shí)為了簡(jiǎn)化整個(gè)指令,需要使用范圍更廣的擴(kuò)展正則表達(dá)式。
grep 命令僅支持基礎(chǔ)正則表達(dá)式,如果使用擴(kuò)展正則表達(dá)式,需要使用 egrep 或 awk 命令。

擴(kuò)展正則表達(dá)式常見元字符

Shell編程之正則表達(dá)式三劍客——grep,egrep

網(wǎng)站題目:Shell編程之正則表達(dá)式三劍客——grep,egrep
標(biāo)題網(wǎng)址:http://muchs.cn/article16/pdhigg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、Google微信公眾號(hào)、App開發(fā)、品牌網(wǎng)站建設(shè)網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司