删除包含插入符号的所有行(^)

时间:2016-07-17 01:31:33

标签: bash sed

我尝试了sed -i '/^/d' myfile并删除了整个文件。怎么避免这个?我想删除其中包含^的所有行。

2 个答案:

答案 0 :(得分:5)

sed -i '/\^/d' myfile

您需要转义^特殊字符。

答案 1 :(得分:3)

在正则表达式中," special"当它们存在于括号表达式(方括号)中时,它们会失去特殊含义。因此,您认为搜索[^]就是您所需要的。

唉,事实证明,虽然这对插入符号起作用,但当它是括号表达式的第一个字符时,插入符号也会获得不同的特殊含义。它用于否定表达式。所以[^]实际上是无效的正则表达式语法,这个角色仍然需要被转义。

您在GNU sed中寻找的内容可能如下所示:

sed -i '/[\^]/d' myfile

这看起来很尴尬(特别是与@ threadp的答案相比),但我更喜欢使用方括号方法来转义特殊字符,因为它以相同的方式处理所有其他特殊字符,并且其行为在正则表达式解析器中是一致的。反斜杠用于其他事情 - 在shell脚本中连续行,将字符转换为特殊字符(\n\t等)。太多的反斜杠会让事情变得混乱。

有一点值得注意的是,如果它是FIRST字符,那么插入符号在括号表达式中只是特殊的。以下是有效的:

$ printf 'one\ntwo^\n' | sed -ne '/[X^]/p'
two^