溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

shell腳本之正則表達(dá)式(一)---grep、egrep

發(fā)布時(shí)間:2020-07-14 06:03:36 來源:網(wǎng)絡(luò) 閱讀:625 作者:caozhengtao1213 欄目:系統(tǒng)運(yùn)維

正則表達(dá)式的定義

正則表達(dá)式又稱正規(guī)表達(dá)式、常規(guī)表達(dá)式。正則表達(dá)式是由普通字符與元字符組成的文字模式。模式用于描述在搜索文本時(shí)要匹配的一個(gè)或多個(gè)字符串。正則表達(dá)式一般用于腳本編程與文本編輯器中。很多文本處理器與程序設(shè)計(jì)語言均支持正則表達(dá)式,在Linux 系統(tǒng)中常見的文本處理器如grep、egrep、sed、awk。正則表達(dá)式具備很強(qiáng)大的文本匹配功能,能夠在文本海洋中快速高效地處理文本。



正則表達(dá)式用途

正則表達(dá)式對(duì)于系統(tǒng)管理員來說是非常重要的,系統(tǒng)運(yùn)行過程中會(huì)產(chǎn)生大量的信息,這些信息有些是非常重要的,有些則僅是告知的信息。身為系統(tǒng)管理員如果直接看這么多的信息數(shù)據(jù),無法快速定位到重要的信息,如“用戶賬號(hào)登錄失敗”“服務(wù)啟動(dòng)失敗”等信息。這時(shí)可以通過正則表達(dá)式快速提取“有問題”的信息。如此一來,可以將運(yùn)維工作變得更加簡(jiǎn)單、方便。



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

正則表達(dá)式的字符串表達(dá)方法根據(jù)不同的嚴(yán)謹(jǐn)程度與功能分為基本正則表達(dá)式與擴(kuò)展正則表達(dá)式?;A(chǔ)正則表達(dá)式是常用的正則表達(dá)式的最基礎(chǔ)的部分。

1.查找特定字符
-n 表示顯示行號(hào)
-i 表示不區(qū)分大小寫
(符合匹配標(biāo)準(zhǔn)的字符,字體顏色會(huì)變?yōu)榧t色)



實(shí)例演示

(1)查找出特定字符“the” 所在位置

[root@localhost ~]# grep -n 'the' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep



(2)反向查找不包含“the”字符的行

[root@localhost~]# grep -vn 'the' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep



2.利用中括號(hào)“[ ]”來查找集合字符
(1)查找“shirt”與“short”這兩個(gè)字符串,“[]”中無論有幾個(gè)字符,都僅代表一個(gè)字符,也就是說“[io]”表示匹配“i”或者“o”。

[root@localhost ~]# grep -n 'sh[io]rt' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep

(2)查找重復(fù)單個(gè)單詞字符

[root@localhost ~]# grep -n 'oo' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep

(3)通過集合字符的反向選擇“[^]”來實(shí)現(xiàn)查找“oo”前面不是“R”的字符串

[root@localhost ~]# grep -n '[^R]oo' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep

(4)查找“oo”前面存在小寫或大寫字母,其中“a-z”表示小寫字母,“A-Z”表示大寫字母

[root@localhost ~]# grep -n '[^a-z]oo' /opt/httpd.conf      //小寫字母

shell腳本之正則表達(dá)式(一)---grep、egrep

[root@localhost ~]# grep -n '[^A-Z]oo' /opt/httpd.conf   //大寫字母

shell腳本之正則表達(dá)式(一)---grep、egrep

(5)查找包含數(shù)字的行

[root@localhost ~]# grep -n '[0-9]' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep



3.查找行首“^”與行尾字符“$”
(1)查找以root開頭的行

[root@localhost ~]# grep -n '^root' /etc/passwd

shell腳本之正則表達(dá)式(一)---grep、egrep

(2)查找以bash結(jié)尾的行

[root@localhost ~]# grep -n 'bash$' /etc/passwd

shell腳本之正則表達(dá)式(一)---grep、egrep

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

[root@localhost ~]# grep -n '^[a-z]' /etc/passwd

shell腳本之正則表達(dá)式(一)---grep、egrep

(4)查詢以問號(hào)?結(jié)尾的行,需要使用轉(zhuǎn)義字符“\”將具有特 殊意義的字符轉(zhuǎn)化成普通字符

[root@localhost ~]# grep -n '\?$' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep
(5)查詢一空白行,使用^$

[root@localhost ~]# grep -n '^$' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep

4.查找任意一個(gè)字符“.”與重復(fù)字符“*”
(1)查找以w開頭d結(jié)尾的字符串

[root@localhost ~]# grep -n 'w..d' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep

(2)查詢包含至少兩個(gè) o 以上的字符串,可用星號(hào)元字符. 代表的是重復(fù)零個(gè)或多個(gè)前面的單字符,所以凡是包含 o、oo、ooo、ooo,等的資料都符合標(biāo)準(zhǔn)。

[root@localhost ~]# grep -n 'ooo*' test.txt

shell腳本之正則表達(dá)式(一)---grep、egrep

(3)查詢以 w 開頭 d 結(jié)尾,其中間包含至少一個(gè) o 的字符串

[root@localhost ~]# grep -n 'woo*d' test.txt

shell腳本之正則表達(dá)式(一)---grep、egrep

(4)查詢以 w 開頭 d 結(jié)尾,中間的字符可有可無的字符串。

[root@localhost ~]# grep -n 'w.*d' test.txt

shell腳本之正則表達(dá)式(一)---grep、egrep

(5)查詢?nèi)我鈹?shù)字所在行

[root@localhost ~]# grep -n '[0-9][0-9]*' /opt/httpd.conf

shell腳本之正則表達(dá)式(一)---grep、egrep



5.查找連續(xù)字符范圍{ }
在使用“{}”字符時(shí),需要利用轉(zhuǎn)義字符“\”,將“{}”字符轉(zhuǎn)換成普通字符。
(1)查詢兩個(gè)o的字符

[root@localhost ~]# grep -n 'o\{2\}' test.txt

shell腳本之正則表達(dá)式(一)---grep、egrep

(2)查詢以 w 開頭以 d 結(jié)尾,中間包含 2~3個(gè) o 的字符串

root@localhost ~]# grep -n 'wo\{2,\}d' test.txt

shell腳本之正則表達(dá)式(一)---grep、egrep

(3)查詢以 w 開頭以 d 結(jié)尾,中間包含 2 以上 o 的字符串

[root@localhost ~]# grep -n 'wo\{2,\}d' test.txt

shell腳本之正則表達(dá)式(一)---grep、egrep



基礎(chǔ)正則表達(dá)式常見元字符

元字符 作用
^ 匹配輸入字符串的開始位置。在方括號(hào)表達(dá)式中使用,表示不包含該字符集合。
$ 匹配輸入字符串的結(jié)尾位置。
. 匹配除“\r\n”之外的任何單個(gè)字符
\ 將下一個(gè)字符標(biāo)記為特殊字符、原義字符、向后引用、八進(jìn)制轉(zhuǎn)義符。
* 匹配前面的子表達(dá)式零次或多次。要匹配“”字符,請(qǐng)使用“\”
[ ] 字符集合。匹配所包含的任意一個(gè)字符。例如,“[abc]”可以匹配“plain”中的“a”
^ ] 賦值字符集合。匹配未包含的一個(gè)任意字符。
[n1-n2] 字符范圍。匹配指定范圍內(nèi)的任意一個(gè)字符。
{n} n 是一個(gè)非負(fù)整數(shù),匹配確定的 n 次
{n,} n 是一個(gè)非負(fù)整數(shù),至少匹配 n 次。
n,m m 和n 均為非負(fù)整數(shù),其中 n<=m,最少匹配 n 次且最多匹配 m 次


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

通常情況下會(huì)使用基礎(chǔ)正則表達(dá)式就已經(jīng)足夠了,但有時(shí)為了簡(jiǎn)化整個(gè)指令,需要使用范圍更廣的擴(kuò)展正則表達(dá)式。此外grep 命令僅支持基礎(chǔ)正則表達(dá)式,如果使用擴(kuò)展正則表達(dá)式,需要使用 egrep 命令。egrep 命令與 grep 命令的用法基本相似。egrep 命令是一個(gè)搜索文件獲得模式,使用該命令可以搜索文件中的任意字符串和符號(hào),也可以搜索一個(gè)或多個(gè)文件的字符串,一個(gè)提示符可以是單個(gè)字符、一個(gè)字符串、一個(gè)字或一個(gè)句子。



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

元字符 作用
+ 重復(fù)一個(gè)或者一個(gè)以上的前一個(gè)字符
? 零個(gè)或者一個(gè)的前一個(gè)字符
l 使用或者(or)的方式找出多個(gè)字符
() 查找“組”字符串
()+ 辨別多個(gè)重復(fù)的組
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI