shell編程------正則表達式

正則表達式介紹

正則表達式是一種文本模式匹配,包括普通字符和特殊字符,它是一種字符串匹配模式,可以用來檢查一個字符串是否含有某種子串,將匹配的子串替換或者從某個字符串中取出某個條件的子串。

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

學習視頻: 

https://www.bilibili.com/video/BV1vE41127wm?p=24

https://www.bilibili.com/video/BV1vE41127wm?p=25

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章