使用sed删除与特定正则表达式匹配的行

35

我试图删除所有以一些可选特殊字符开头,后跟blubb的行:

这是我想匹配的行:

#blubb
*blubb
-blubb
blubb

虽然应该可以完成任务,但是它不起作用 :(

sed "/^.?blubb$/d" -i special.conf  
sed "/^[#*-]?blubb$/d" -i special.conf  

有没有人有正确的解决方案

1个回答

45

使用以下sed命令:

sed -i.old '/^[#*-]\{0,1\}blubb/d' special.conf

或者

sed -i.old -E '/^[#*-]?blubb/d' special.conf

sed -i.old -r '/^[#*-]?blubb/d' special.conf

啊是的,\?\+ 是 GNU 扩展。 - potong
我不认为即使使用GNU sed,它们也能正常工作。 一旦它们被反斜杠转义,它们就失去了特殊含义(而且只有在指定“-r”时才有这些特殊含义)。 - Happy Green Kid Naps
2
你好,这对我也完美地起作用了。但是我不明白选项 -i.old 和 -E 或 -r 是什么意思。谢谢。 - David Okwii
8
-i 用于sed的行内编辑,-r或-E用于扩展正则表达式。 - anubhava
1
请问可以解释一下'.old'后缀是什么意思吗? - chenchuk
5
这是用作扩展,用于为内联编辑创建备份副本。 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接