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

为什么我不能得到任何输出?

谢谢你。

4

3 回答 3

10

您需要通过指定--posixor--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 时才提供它们。

于 2011-12-01T14:46:08.933 回答
0

在我的机器上:

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

这是你想要的吗?我在 Windows XP 上的 Cygwin 中使用 GNU awk 4.0.0。

于 2011-12-01T14:41:53.563 回答
0

您应该强制 POSIX 在 awk 中使用 {}

echo xx y11y rrr | awk -W posix '{ if ($2 ~/y[1-5]{2}y/) print $3}'
于 2011-12-01T14:45:26.533 回答