echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
为什么我无法获得任何输出?
谢谢。
答案 0 :(得分:8)
您需要通过指定--posix
或--re-interval
选项在正则表达式匹配中启用“区间表达式”。
e.g。
echo xx y11y rrr | awk --re-interval '{ if ($2 ~ /y[1-5]{2}y/) print $3}
从手册页:
- 重间隔 允许在正则表达式匹配中使用区间表达式(请参阅下面的正则表达式)。区间表达式是 不是传统的 AWK语言。 POSIX标准添加了它们,使awk和egrep相互一致。但是,它们的用途是 可能打破旧的AWK程序,所以 如果使用此选项请求它们,或者指定了--posix,则gawk仅提供它们。
答案 1 :(得分:0)
在我的机器上:
$ echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
rrr
这是你想要的吗?我在Windows XP上使用Cygwin中的GNU awk 4.0.0。
答案 2 :(得分:0)
你应该强迫POSIX在awk中使用{}
echo xx y11y rrr | awk -W posix '{ if ($2 ~/y[1-5]{2}y/) print $3}'