從零開(kāi)始學(xué)習(xí)Linux(四十):Shell編程之正則表達(dá)式

1、正則表達(dá)式與通配符

正則表達(dá)式:用來(lái)在文件中匹配符合條件的字符串,正則是包含匹配。grep、awk、sed等命令都可以支持正則表達(dá)式。

通配符:用來(lái)匹配符合條件的文件名,通配符是完全匹配。ls、find、cp這些命令不支持正則表達(dá)式,所以只能使用shell自己的通配符來(lái)進(jìn)行匹配了。

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

元字符 作用
* 前一個(gè)字符匹配0次或任意多次;
. 匹配除了換行符外任意一個(gè)字符;
^ 匹配行首。例如:^hello會(huì)匹配以hello開(kāi)頭的行;
$ 匹配行尾。例如:hello&會(huì)匹配以hello結(jié)尾的行;
[] 匹配中括號(hào)中指定的任意一個(gè)字符,只匹配一個(gè)字符。 例如:[abcd] 匹配abcd中任意一個(gè)字母,[0-9] 匹配任意一位數(shù)字, [a-z][0-9] 匹配小寫和一位數(shù)字構(gòu)成的兩位字符;
[^] 匹配除中括號(hào)的字符以外的任意一個(gè)字符。例如:[^0-9] 匹配任意一位非數(shù)字字符,[^a-z] 表示任意一位非小寫字母;
\ 轉(zhuǎn)義符。用于將特殊符號(hào)的含義取消。
\{n\} 表示其前面的字符恰好出現(xiàn)n次。例如:[0-9]{4} 匹配4位數(shù)字;
\{n,\} 表示其前面的字符出現(xiàn)不小于n次。例如: [0-9]{2,} 表示兩位及以上的數(shù)字;
\{n,m\} 表示其前面的字符至少出現(xiàn)n次,最多出現(xiàn)m次。例如: [a-z]{6,8} 匹配6到8位的小寫字母;

3、測(cè)試正則表達(dá)式

創(chuàng)建文件test_rule.txt,并且編輯內(nèi)容。如下圖所示:

3.1、* 前一個(gè)字符匹配0次,或任意多次

命令1:grep "h*" test_rule.txt
作用:匹配所有內(nèi)容,包括空白行;

命令2:grep "hh*" test_rule.txt
作用:匹配至少包含有一個(gè)h的行;

命令3:grep "hhh*" test_rule.txt
作用:匹配至少包含兩個(gè)連續(xù)h的字符串;

3.2、. 匹配除了換行符外任意一個(gè)字符

命令:grep "y..r" test_rule.txt
作用:匹配在y和r這兩個(gè)字母之間一定有兩個(gè)字符的字符串;

3.3、^匹配行首

命令:grep "^m" test_rule.txt
作用:搜索以m開(kāi)頭的行

3.4、$匹配行尾

命令:grep "h$" test_rule.txt
作用:搜索以h結(jié)尾的行

前面在 從零開(kāi)始學(xué)習(xí)Linux(三十一):Shell腳本的執(zhí)行方式 章節(jié)中提到過(guò)windows下shell腳本和Linux系統(tǒng)下shell腳本格式不同的問(wèn)題。Linux系統(tǒng)下shell腳本格式是以$為行尾的,但是Windows下面shell腳本格式是以^M$為行尾的。

通過(guò)命令"cat -A test_rule.txt"可以查看,如下圖所示:

如果是以^M$為行尾的,使用命令"grep "h$" test_rule.txt",是匹配不到任何數(shù)據(jù)的。

因此,當(dāng)使用$匹配行尾且沒(méi)有匹配到任何數(shù)據(jù)的時(shí)候,先考慮一下是否是由于文件格式的原因?qū)е碌?。如果格式不一樣,可以使用前面章?jié)提到的命令轉(zhuǎn)換一下文件格式。

3.5、[]匹配括號(hào)中指定的任意一個(gè)字符,只匹配一個(gè)字符

命令:grep "h[eh]h" test_rule.txt
作用: 匹配h和h字母中為e和h的行數(shù)據(jù)。

3.6、 [^] 匹配除中括號(hào)的字符以外的任意一個(gè)字符

命令:grep "^[^a-z]" test_rule.txt
作用:匹配不以小寫字母開(kāi)頭的行

3.7、\ 轉(zhuǎn)義符

命令:grep "\!$" test_rule.txt
作用:搜索以!結(jié)尾的行

3.8、\{n\} 表示其前面的字符恰好出現(xiàn)n次

命令:grep "o\{2\}" test_rule.txt
作用:匹配連續(xù)出現(xiàn)2次o的行數(shù)據(jù)

3.9、\{n,m\} 匹配其前面的字符至少出現(xiàn)n次最多出現(xiàn)m次

命令:grep "o\{3,5\}" test_rule.txt
作用:匹配連續(xù)出現(xiàn)最少3次,最多5次的行數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容