开始时删除带括号的行

时间:2019-05-05 22:31:34

标签: sed

我需要删除一行这样的行:

[success] Total ....

我尝试了以下sed命令,但没有用

sed '/\[/d' filename > newFile

但是当我使用新文件时,该行仍然存在!摆脱它的正确命令是什么

3 个答案:

答案 0 :(得分:2)

如果您希望删除以图案开头的行,则应在图案开头使用锚点符号(^):

sed -E '/^\[/d' filename > newFile

要在模式的开头容纳由于缩进而常见的空格,您应该

sed -E '/^[[:blank:]]+\[/d' filename > newFile

GNU sed具有通过-i选项实现的就地编辑选项,因此上述内容可以替换为

sed -Ei '/^[[:blank:]]+\[/d' filename

似乎sedno limits涉及文件大小,但是对于大文件来说通常很慢。

答案 1 :(得分:0)

要删除以[开头的行,我们可以使用此sed模式

$ sed -E '/^\s*\[/d' filename

对具有以下内容的文件data3.txt说:

$ cat data3.txt
dont remove this line
[success] faile ... remove this line
[hola to be removed
[hola] remove this
 [hola]  remove this
[] remove thisline
this [success] Total dont remove this

您可以运行此命令,该命令在开始时要留有空格/制表符/空格等,后跟[和其他文本数据:

$ sed '/^\s*\[/d' data3.txt
dont remove this line
this [success] Total dont remove this

这里

'/^\s*\[/d' : takes care of [ preceded by zero or more occurrences of space/tab etc.

答案 2 :(得分:0)

使用grep

grep -v '^[[]' file

为了匹配[,我通常将其放入字符类:

[]  # empty character class
[[] # character class with [ as the only item

顺便说一句:如果在行的开头允许有可选的空格:

grep -v '^[[:blank:]]*[[]' file