Linux 的正規表示式

zhangdeTalk發表於2020-02-06

Linux的正規表示式

重要性

我們通過sed或awk工具可以輕鬆愉快的對一堆文字分析、對資料進行處理、伺服器報錯日誌的分析、伺服器使用者訪問日誌統計分析等。

但是要玩耍好sed和awk工具,正規表示式是基礎,不得不掌握。

單個字元

特定字元

如'1'、'a'、'A'

範圍字元

數字字元:[0-9],代表0到9數字中的任意一個

小寫字元:[a-z],代表a到z字母中的任意一個

大寫字元:[A-Z],代表A到Z字母中的任意一個

特殊符號:[,._]

取反:[^0-9],代表除0到9數字外的任意一個字元

任意字元

代表任意字元:'.'

注意:'[.]',代表普通的點(本身的含義),'\.'也是代表普通的點(本身的含義)

邊界字元

頭尾字元,即以某個或多個字元開頭,或者是以某個或多個字元結尾

例如:
^root 代表以這個單詞開始匹配
root$ 代表以這個單詞結尾匹配
^$ 代表空行

元字元

代表普通字元或特殊字元

\w 代表匹配任何字類字元,包括下劃線:[A-Za-z0-9_]
\W 代表匹配非任何字類字元,如:^[A-Za-z0-9_]
\b 代表單詞的分割符(即不在連續的單詞中間),如:'\bx'

重複字元

* 代表零次或者多次匹配前面的字元或者子表示式 
如 'ab*' ,只對b重複
'\(ab\)*' ,對ab重複
也可用{0,}表示

+ 代表一次或者多次匹配前面的字元或者子表示式 
如 'ab\+',只對b重複
也可用{1,}表示

?代表零次或者一次匹配前邊的字元或子表示式 
如 'ab\?',只對b重複
也可用{0,1}表示

重複特定次數: {n,m} 重複最小n,最大m次
如 '[0-9]\{n,m\}'

任意字串的表示:.*
如:'^r.*'、'm.*c'//不僅匹配4個字元,開頭是m,結尾是c,但中間長度2個字元或以上

注意:'m..c' 只匹配4個字元,開頭是m,結尾是c

坑:貪婪的匹配,如:'\bm.*c\b'

更加精確的匹配,如:'\bm[a-z]*c\b'

邏輯正則

| 或,如:'bin/\(false\|true\)'

哪些字元表示需要帶'\'

(),如:'\(\)'
{},如:'\{\}'
+,如:'\+'
?,如:'\?'
|,如:'\|'
\,如:'\\'

例子

1、匹配4-10位的QQ號

'^[0-9]\{4,10\}$'

2、匹配15位或18位身份證號(支援帶X的)

'^[1-9]\([0-9]\{13\}|[0-9]\{16\}[0-9xX]$'

3、匹配密碼(由數字、26個字母和下劃線組成)

'^\w\+$'

本作品採用《CC 協議》,轉載必須註明作者和本文連結

阿德

相關文章