echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
为什么我不能得到任何输出?
谢谢你。
您需要通过指定--posix
or--re-interval
选项在正则表达式匹配中启用“间隔表达式”。
例如
echo xx y11y rrr | awk --re-interval '{ if ($2 ~ /y[1-5]{2}y/) print $3}
从手册页:
--re-interval 在正则表达式匹配中启用区间表达式(参见下面的正则表达式)。传统上,AWK 语言中不提供区间表达式。POSIX 标准添加了它们,以使 awk 和 egrep 彼此一致。但是,它们的使用可能会破坏旧的 AWK 程序,因此 gawk 仅在使用此选项请求它们或指定 --posix 时才提供它们。
在我的机器上:
$ echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
rrr
这是你想要的吗?我在 Windows XP 上的 Cygwin 中使用 GNU awk 4.0.0。
您应该强制 POSIX 在 awk 中使用 {}
echo xx y11y rrr | awk -W posix '{ if ($2 ~/y[1-5]{2}y/) print $3}'