正則表達式介紹
正則表達式是一種文本模式匹配,包括普通字符和特殊字符,它是一種字符串匹配模式,可以用來檢查一個字符串是否含有某種子串,將匹配的子串替換或者從某個字符串中取出某個條件的子串。
shell也支持正則表達式,但不是所有命令都支持正則表達式,常見的命令只有grep、sed、awk命令支持正則表達式。
示例:數據源 vim file
特殊字符
^ 錨定開頭 ,^a表示以a開頭,默認錨定一個字符
$ 錨定結尾,a$以a結尾,默認錨定一個字符
測試案例:egrep是增強版的grep命令,也支持正則表達式
1> egrep "^ac$" file 精確匹配,匹配以a開頭以c結尾的字符串
2> egrep "^a" file 模糊匹配,匹配以a開頭的字符串
匹配符:匹配字符串
. 匹配除回車以外的任意字符
() 字符串分組
[ ] 定義字符串,匹配括號中的一個字符
[^] 表示否定括號中出現字符類中的字符,取反
\ 轉義字符
| 或者
測試案例
1> egerp "^a.c$" file 匹配以a開頭,c結尾,中間任意一個字符的字符串
2> egrep "^a[0-9]c$" file 匹配以a開頭,c結尾,中間任意一個0-9的數字的字符串
3> egrep "^a[^0-9]c$" file 匹配以a開頭,c結尾,中間任意一個不爲0-9的字符的字符串
4> 往file中先添加一個數據源 a*c echo a*c >> file
egerp "^a\*c$" file 表示匹配a*c
5> egrep "^(a|b)c$" file 表示匹配以a或者b開頭,以c結尾的字符串
限定符:對前面的字符或者字符串中做限定說明
* 某個字符之後加星號表示該字符不出現或者出現多次
? 與星號相似,表示該字符出現一次或者不出現
+ 與星號相似,表示其前面字符出現一次或者多次,但是必須出現一次
{n,m} 某個字符之後出現,表示這個字符至少出現n次,最多出現m次
{m} 正好出現了m次
測試案例
1> egerp "^ab*c$" file 表示匹配以a開頭,以c結尾,中間b出現0次或者多次的字符串
2> egrep "^ab?c$" file
3> egrep "^ab+c$" file
4> egrep "^ab{2,5}c$" file
5> egrep "^ab{3}c$" file
POSIX特殊字符
[:alnum:] 匹配任意字母字符0-9 a-z A-Z
[:alpha:] 匹配任意字符、大寫或小寫
[:digit:] 數組0-9
[:graph:] 非空字符(非空格控制字符)
[:lower:] 小寫字母a-z
[:upper:] 大寫字符A-Z
[:cntrl:] 控制字符
[:print:] 非空字符(包括空格)
[:punct:] 標點符號
[:blank:] 空格和TAB字符
[:xdigit:] 16進制數字
[:space:] 所有空白字符(新行、空格、製表符)
注意:[[ ]] 雙中括號的意思,第一個中括號是匹配符[ ],匹配中括號中任意一個字符,第二個[ ]是格式,如[:digit:]。
測試案例:
1> egrep "^a[[:alnum:]]c$" file
2> egrep "^a[[:upper:]]c$" file
3> egrep "^a[[:lower:]]c$" file
4> egrep "^a[[:digit:]]c$" file
5> egrep "^a[[:lower:]]*c$" file
學習視頻: