重要性
我們通過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.*cb'
更加精确的比對,如:'bm[a-z]*cb'
邏輯正則
| 或,如:'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\+$'