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 的数字与字节
^ :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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24237320/viewspace-2080596/