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ù)
