带有正则表达式的 sed 未按预期工作

带有正则表达式的 sed 未按预期工作

这是我第一次尝试使用 SED。

我可以使用替换命令来处理简单的字符串。如:

sed -i 's/foo/bar/g' file.txt

但是,当我尝试使用正则表达式时,它停止工作。我想使用的正则表达式试图识别 URL:

(https?:)?(\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)

我正在尝试从文本文件中删除所有 URL。这是我的完整命令:

sed -i 's/(https?:)?(\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)//g' file.txt

有人能看到这个问题吗?

答案1

您可能需要添加-rsed命令中以打开扩展正则表达式。

简而言之,没有-r, ?, +, (), {}, 和|具有字面意义,您需要在它们前面加上反斜杠以赋予它们“正则表达式”的含义。

GNU 网站上的文档以获得更深入的解释。

相关内容