这是我第一次尝试使用 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
您可能需要添加-r
到sed
命令中以打开扩展正则表达式。
简而言之,没有-r
, ?
, +
, ()
, {}
, 和|
具有字面意义,您需要在它们前面加上反斜杠以赋予它们“正则表达式”的含义。
看GNU 网站上的文档以获得更深入的解释。