awk可以识别哪些类型的正则表达式?这个命令
echo "aa" | gawk '/a{2,3}/ {print}'
不返回任何东西,而
echo "a{2,3}" | gawk '/a{2,3}/ {print}'
返回a{2,3}
。
既然可以识别其他扩展的正则表达式功能(例如交替),那么在哪里可以找到精确的参考?在GNUfind
手册中有关awk正则表达式的部分中,应接受上述语法,因为:
间隔由“ {”和“}”指定。
从手册:
最初,由于旧程序可能在正则表达式常量中使用'{'和'}',因此gawk与正则表达式中的间隔表达式不匹配。
但是,从版本4.0开始,gawk会默认匹配间隔表达式。这是因为对于大多数gawk用户而言,与POSIX的兼容性比与旧程序的兼容性更为重要。
由于Ubuntu 12.04具有GNU awk 3.1.8,而14.04具有4.0.1,因此您必须使用12.04(或另一个这样的旧版本)。
设置POSIXLY_CORRECT
POSIX行为:
$ echo "a{2,3}" | POSIXLY_CORRECT=1 gawk '/a{2,3}/ {print}'
$ echo "aa" | POSIXLY_CORRECT=1 gawk '/a{2,3}/ {print}'
aa
或者,-r
如果要保留GNU扩展并使用间隔表达式,请使用该选项:
-r
--re-interval
在正则表达式中允许间隔表达式(请参阅正则表达式运算符)。现在,这是gawk的默认行为。不过,该选项仍然存在(既可以向后兼容,也可以与结合使用
--traditional
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句