gpt4 book ai didi

regex - Sed 表达式不允许可选的分组字符串

转载 作者:行者123 更新时间:2023-12-03 05:59:25 26 4
gpt4 key购买 nike

我尝试在 sed 脚本中使用以下正则表达式,但它不起作用:

sed -n '/\(www\.\)\?teste/p'

上面的正则表达式似乎不起作用。 sed 似乎没有将 ? 应用于分组的 www\.

如果您使用 -E 参数将 sed 切换为使用扩展正则表达式,那么语法将变为:

sed -En '/(www\.)?teste/p'

这工作正常,但我想在不支持 -E 运算符的计算机上运行此脚本。我很确定这是可能的,而且我正在做一些非常愚蠢的事情。

最佳答案

标准 sed 只能理解 POSIX Basic Regular Expressions (BRE),而不是扩展正则表达式 (ERE),并且 ? 是 ERE 中的元字符,但不是 BRE 中的元字符。

如果您打开 ERE,您的 sed 版本可能会支持它们。对于 GNU sed,相关选项是 -r--regexp-extended,描述为“在脚本中使用扩展正则表达式”。

但是,如果您的 sed 不支持它(这很合理),那么您就会陷入困境。导入支持它们的 sed 版本,或者重新设计您的处理。也许您应该使用 awk 来代替。

<小时/>

2014-02-21

我不知道为什么我没有提到,尽管 sed 不支持简写 ?\? 表示法,它确实支持使用 \{n,m\} 进行计数范围,因此您可以使用 \{0,1\} 模拟 ?:

sed -n '/\(www\.\)\{0,1\}teste/p' << EOF
http://www.tested.com/
http://tested.com/
http://www.teased.com/
EOF

产生:

http://www.tested.com/
http://tested.com/

在 Mac OS X 10.9.1 Mavericks 上使用标准 BSD sed 和 GNU sed 4.2.2 进行测试。

关于regex - Sed 表达式不允许可选的分组字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6156259/

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