awk和regex的简单问题
为什么我不能得到任何输出 谢谢。在我的机器上:awk和regex的简单问题,regex,shell,awk,gawk,Regex,Shell,Awk,Gawk,为什么我不能得到任何输出 谢谢。在我的机器上: echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}' 这是你想要的吗?我在Windows XP的Cygwin中使用GNU awk 4.0.0。您应该强制POSIX在awk中使用{} $ echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}' rrr 您需要通过指定--posix或--re interval选项在正则表达
echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
这是你想要的吗?我在Windows XP的Cygwin中使用GNU awk 4.0.0。您应该强制POSIX在awk中使用{}
$ echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
rrr
您需要通过指定--posix
或--re interval
选项在正则表达式匹配中启用“interval expressions”
e、 g
从手册页:
--重新间隔
在正则表达式匹配中启用区间表达式的使用(请参见下面的正则表达式)。区间表达式为
传统上不适用于
AWK语言。POSIX标准添加了它们,以使awk和egrep彼此一致。然而,它们的用途是有限的
可能会破坏旧的AWK程序,所以
gawk仅在使用此选项请求它们或指定--posix时提供它们
您希望得到什么输出?呃,我仍然无法从您的答案中获得任何输出。似乎是操作系统特有的问题为了支持间隔表达式而指定
--re interval
的需要已在gawk4.0.0
中删除。您尝试使用POSIX regexp功能,但awk使用它自己的regexp格式。因此,您应该强制使用regexp的POSIX格式。再看看dogbane的答案。如果不使用{}
表达式,我该怎么办?你可以使用[1-5]{2}
,而不是[1-5][1-5]
。不,区间表达式,比如{2}除非使用--re interval
或--posix
标志,否则
将不起作用。您不需要退出大括号。为了明确起见:这仅适用于gawk
(GNUawk
)。快速更新:由于gawk4.0
您不再需要--re interval
。
echo xx y11y rrr | awk -W posix '{ if ($2 ~/y[1-5]{2}y/) print $3}'
echo xx y11y rrr | awk --re-interval '{ if ($2 ~ /y[1-5]{2}y/) print $3}