gpt4 book ai didi

regex - 为什么带有 -i 的 gnu-sed 需要转义所有内容?

转载 作者:行者123 更新时间:2023-11-29 09:37:57 25 4
gpt4 key购买 nike

我正在使用 gnu-sed,我发现了以下内容:

sed -r 's|((https?://)?(www\.)?)example\.com\.au|\1|gi' test.txt

如果没有 -i,这将正常工作并匹配 test.txt 中的以下行:

https://www.example.com.au

但是,如果我添加 -i,我需要转义几乎所有内容(甚至是问号)才能获得相同的结果。它最终看起来像:

     sed -ir 's|\(\(https\?://\)\?\(www\.\)\?\)example\.com\.au|\1|gi' test.txt
#COMP:sed -r 's|((https?://)?(www\.)?)example\.com\.au|\1|gi' test.txt

这更丑了...我不喜欢它:(

我在 man sed 中找不到任何解释这一点的内容。

为什么会发生这种情况,有什么解决办法吗?

最佳答案

documentation 的简短摘录:

-i[SUFFIX]
--in-place[=SUFFIX]
This option specifies that files are to be edited in-place.

当你写的时候:

sed -ir '...'

sed 将命令行解释为 -i 后跟用于备份文件的后缀(上述摘录中的缩写形式)。

因此,它不再看到 -r 选项并将最后一个参数解释为基本 regex 而不是扩展的 regex。正如同一个文档页面所说,“扩展的正则表达式 [...] 可以更清晰,因为它们通常有较少的反斜杠”

解决方案非常简单:单独添加您的-i 命令行选项,不要将它与-r 结合使用:

sed -i -r 's|((https?://)?(www\.)?)example\.com\.au|\1|gi'

(不能组合带有参数的命令行选项。)

关于regex - 为什么带有 -i 的 gnu-sed 需要转义所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138909/

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