在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”。
谢谢。
答案 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。