1

在 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

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

谢谢。

4

1 回答 1

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。

于 2021-02-11T18:50:58.373 回答