如何使用`awk`打印正则表达式匹配?

Ist*_*van 35 bash shell awk

有没有办法awk在shell中使用命令打印正则表达式匹配(但只有匹配的字符串)?

Sie*_*geX 45

是的,在awk使用match()函数并给它可选的数组参数(a在我的例子中).执行此操作时,第0个元素将是与正则表达式匹配的部分

$ echo "blah foo123bar blah" | awk '{match($2,"[a-z]+[0-9]+",a)}END{print a[0]}'
foo123
Run Code Online (Sandbox Code Playgroud)

  • 哦,它是gawk ......来自http://stackoverflow.com/questions/5536018/how-to-get-match-regex-pattern-using-awk-from-file"awk match()函数只有三个参数存在于gawk" (7认同)
  • 我收到错误:awk:源代码行1上下文的语法错误是>>> {匹配($ 2,"[az] + [0-9] +",<<< awk:源代码行1的非法声明awk:非法在源代码行1中使用zsh和bash的语句 (5认同)
  • 所以换句话说,这并没有回答这个问题。 (3认同)
  • 我知道grep -o,它必须是AWK :) (2认同)

Jos*_*ook 22

解决方案的awk特定(而不是一个使用gawk)实现:

$ echo "blah foo123bar blah" | awk 'match($0,/[a-z]+[0-9]+/) {print substr($0,RSTART,RLENGTH)}'
foo123
Run Code Online (Sandbox Code Playgroud)