gpt4 book ai didi

regex - 如何在mawk中启用区间正则表达式?

转载 作者:行者123 更新时间:2023-12-04 18:50:45 33 4
gpt4 key购买 nike

在 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”。

谢谢。

最佳答案

更新:更清洁的解决方案:

[g/n/m]awk '$-_~"^"(_="[0-9]")(_)_' 
仅比 egrep 语法稍长
 awk '$-_~"^"(_="[0-9]")(_)_'

egrep '^[0-9]{3}'
一个非常可怕的解决方案是
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。

关于regex - 如何在mawk中启用区间正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51061467/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com