awk和正则表达式的简单问题

znl*_*lyj 3 regex shell awk gawk

 echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
Run Code Online (Sandbox Code Playgroud)

为什么我无法获得任何输出?

谢谢.

dog*_*ane 8

您需要通过指定--posix--re-interval选项在正则表达式匹配中启用"区间表达式" .

例如

echo xx y11y rrr | awk --re-interval '{ if ($2 ~ /y[1-5]{2}y/) print $3}
Run Code Online (Sandbox Code Playgroud)

从手册页:

--re-interval在正则表达式匹配中启用区间表达式(请参阅下面的正则表达式).AWK语言中传统上不提供区间表达式.POSIX标准添加了它们,使awk和egrep相互一致.但是,它们的使用可能会破坏旧的AWK程序,因此如果使用此选项请求它们,或者指定了--posix,则gawk仅提供它们.

  • 明确地说:这仅适用于`gawk`(GNU `awk`)。快速更新:从 `gawk 4.0` 开始,你不再需要 `--re-interval`。 (2认同)