shell程式設計 正規表示式

2021-10-06 14:52:00 字數 2589 閱讀 3964

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

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次

正好出現了m次

測試案例

1> egerp "^ab*c$" file   表示匹配以a開頭,以c結尾,中間b出現0次或者多次的字串

[: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

shell程式設計 正規表示式

正規表示式是用於字元排列和匹配模式的一種語法規則。它主要用於字串的模式分割 匹配 查詢及替換操作。萬用字元 元字元作用 前乙個字元匹配0次或任意多次。匹配除了換行符外任意乙個字元。匹配行首。例如 hello會匹配以hello開頭的行。匹配行尾。例如hello 會匹配以hello結尾的行。匹配中括號中...

shell程式設計 正規表示式

正規表示式是一種用於文字匹配的通用語言。正規表示式的基本組成部分 正規表示式 描述例子 行起始標記 abc匹配以abc起始的行 行結束標記 abc 匹配以abc結束的行 匹配任意乙個字元 abc 匹配abc後跟任意乙個字元 匹配包含在 字元 之中的任意乙個字元 abc de 匹配abcd 或者 ab...

shell程式設計之正規表示式

1 正規表示式 其實就是一種規範,也就是模式,約束字串等符合什麼樣的格式,比如要求字串必須a開頭,t結尾,符合這樣條件的字串就要用到正規表示式。2 兩套庫 gnu linux中有有兩套庫用足正規表示式程式設計,posix庫,自帶的 pcre庫,perl,功能比較全,本文採用perl。3 初體驗 eg...