[Shell] awk學習(3)-regular expression 正規表示式

tolilong發表於2016-04-13
A regular expression is used as a pattern by enclosed it in slashes.

^    :this matches the begining of a string  (awk '/^J/' ff2 :以J開頭)            
$    :this matches only at the end of the string  (awk '/7$/' ff2:以7結尾)
.    :matches any single character  (awk '/J.n/' ff2:以J為首,n為尾,中間只有一個字元的匹配)
[...]:matches any one of the character that are enclose in the square brackets.   (awk '/J[au]/' ff2 :以Ja或者Ju匹配的)
[^...]:like [...] except character not in the square bractets.  (awk '/J[^u]/' ff2 :除去Ju的匹配)
|    :means or (awk '/^O|0$/' ff2  :以O開始,0結尾) (awk '$1~/^O|g$/' ff2 :第一個域以O開始,g結尾)
(...):匹配組(awk '$1~/(foo|net)/' ff1  :第一個域包含foo或者net的)
*    :表示匹配之前字串>=0次 (awk '/f[o]*/' ff1  :匹配o >=0次)
+    :表示匹配之前的字串>0次,至少又一次  (awk '/f[o]+/' ff1  :匹配o >0次)
?    :表示匹配之前的字串0次或者1次,0或者1次  (awk '/Ma?/' ff2)
{n}  :表示匹配之前的字串n次  (wh{3} matches whhh 其他的wh,whh,w都是錯誤的)
{n,} :表示匹配之前的字串>=n次 (wh{3,} matches whhh,whhhh,whhhhh.....)
{n,m}:表示匹配之前的字串>=n,<=m次  (wh{3,5} matches whhh,whhhh,whhhhh)
[a-z]:表示a-z的任意字元 [a-dx-z]=[abcdxyz]


1.整行進行表示式匹配
[/tmp/test]# awk '/foo/{print $2}' ff1
555-1234
555-6699
555-6480
555-2127

2.指定域進行表示式匹配 
~/exp/匹配
!~/exp/不匹配
[/tmp/test]# awk '$2~/12/' ff1        #匹配第二域中有12的行
[/tmp/test]# awk '$2!~/12/' ff1       #匹配第二域中不存在12的行

3.大小寫忽略
[/tmp/test]# awk 'tolower($1)~/ja/' ff2
Jan 13 25 15 115
Jan 21 36 64 620
另一種方法是使用gawk 的IGNORECASE=1


特殊字元的特殊意義
[:alnum:] 代表英文大小寫位元組及數字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小寫位元組,亦即 A-Z, a-z
[:blank:] 代表空白鍵與 [Tab] 按鍵兩者
[:cntrl:] 代表鍵盤上面的控制按鍵,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表數字而已,亦即 0-9
[:graph:] 除了空白位元組 (空白鍵與 [Tab] 按鍵) 外的其他所有按鍵
[:lower:] 代表小寫位元組,亦即 a-z
[:print:] 代表任何可以被列印出來的位元組
[:punct:] 代表標點符號 (punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:] 代表大寫位元組,亦即 A-Z
[:space:] 任何會產生空白的位元組,包括空白鍵, [Tab], CR 等等
[:xdigit:] 代表 16 進位的數字型別,因此包括: 0-9, A-F, a-f 的數字與位元組

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24237320/viewspace-2080596/,如需轉載,請註明出處,否則將追究法律責任。

相關文章