我尝试了sed -i '/^/d' myfile
并删除了整个文件。怎么避免这个?我想删除其中包含^
的所有行。
答案 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^