正则在Awk中用处比较多,这里就其主要用法做个大概的介绍。

  • 使用正则

awk中的regexp是用斜线包括,如/xx/, 就是一个比较简单的正则

awk '/foo/ {print $2}'

上面的示例是每行的记录只要包括foo字符串的,就将其第二个字段打印

注:/foo/ : 是指只要记录包含子串即可,不管其出现的位置

  • 两种匹配方式~  !~
  1. str ~ /regexp/    str匹配正则表达式时,返回true
  2. str !~  /regexp/   str不匹配正则表达式时,返回true
  • 正则中的转义字符
    对于一些非可打印的字符,使用\进行转义。
    如 \t : 代表tab  \\  代表\,   \*代表*
  • 正则中使用的operator
    1. ^ : 头部开始匹配
      如^Sep :  则str必须以Sep开头,正则匹配才会返回true
    2. $ :  尾部匹配
      如end$ :  则str必须以end结尾,则正匹配才会返回true
    3. . : 匹配任意的字符
    4. [...] : 匹配[]包含字符的某一个
      如[0-9] 匹配任意的一个数字
      [a-zA-Z] 匹配任意的字母
      [MVX] 匹配字符’M’ ‘V’ ‘X’中的某一个
      内置的表示:[:alnum:] 代表所有的字母和数字,[:alpha:] 代表所有的字母  [:digit:] 代表所有的数字
    5. [^...] : 中括号中加入^, 匹配非[]内的所有字符
    6. | : 或的关系,^P | [0-9] 匹配所有的以P开头的字符串,或者包含数字的字符串
      注:| 的优先级最低
    7. () : 将正则括起来
    8. 出现次数的operator: * + ? {m,n}
  • awk的正则匹配是大小写敏感,可使用tolower(str) ~ /regexp/

参考文章:http://www.math.utah.edu/docs/info/gawk_5.html