如何在mawk中启用间隔正则表达式?

时间:2018-06-27 11:19:34

标签: regex ubuntu mawk

在Ubuntu 1604上运行mawk时遇到问题:

echo "123-456" | mawk '$0~/^[0-9]{3}/ {print $0}'  

尽管常规模式实际上匹配,但是上面的命令什么也不输出。

然后,我尝试使用相同的常规模式运行egrep:

echo "123-456" | egrep '^[0-9]{3}'  

一切正常!

然后我查阅了mawk的文档,看来根本原因是“传统上awk中没有间隔表达式”。常规模式中的字段“ {3}”会导致此问题。如果我使用“ [0-9] [0-9] [0-9]”而不是“ [0-9] {3}” :,它可以正常工作。
https://invisible-island.net/mawk/manpage/mawk.html https://www.math.utah.edu/docs/info/gawk_5.html

我尝试了--posix' and-re-interval'选项,它们不能同时起作用。
是否有可能在mawk中启用“间隔表达式”?我的操作系统是“ Ubuntu 16.04.4”,Mawk是“ 1.3.3-17ubuntu2”。

谢谢。

1 个答案:

答案 0 :(得分:0)

一个非常可怕的解决方案是

echo "123-456" | {mawk/mawk2} 'BEGIN { FS = "^$" } /^[0-9][0-9][0-9]/' 

另一个会更笨重

echo "123-456" | {mawk/mawk2} 'BEGIN { FS = "^$" 

    } match($0, "^[0-9]+") && (RLENGTH >= 3)' 

这当然非常不理想。如果您可以在 RE 间隔内访问它,请坚持使用 gawk。