替换/删除字符串中的方括号

时间:2017-05-31 08:33:14

标签: bash shell unix sed scripting

我在文件中有以下文字:

Names of students
[Name:Anna]
[Name:Bob]
[Name:Carla]
[Name:Daniel]
[ThisShouldNotBeBeRemoved]
End of all names
Blablabla

我想删除文本文件的所有行,其中出现的字符串格式为[Name:xxx],xxx是一个任意长度的字符串,由任意字符组成。

我尝试了以下方法,但没有成功:

$ sed '/\[Name:*\]/d' file > new-file

我还有其他办法吗?

5 个答案:

答案 0 :(得分:3)

我会将grep-v

一起使用
  

-v, - invert-match

     

反转匹配感,选择不匹配的线条。 (-v由POSIX指定。)

grep -v "\[Name:"

答案 1 :(得分:1)

您需要.*而不仅仅是* ...

sed '/\[Name:.*\]/d' file > new-file
在这种特殊情况下,

*本身就没有意义。在它之前添加.表示“匹配任何字符零次或多次” - 我认为这是您想要做的事情。

如果您想对原始文件进行 就地 修改,而无需重新定位到新文件:

Linux的:

sed -i '/\[Name:.*\]/d' file

MACOS:

sed -i '' '/\[Name:.*\]/d' file

* 注意 - 这会覆盖原始文件。

答案 2 :(得分:0)

sed  '/\[Name:[[:alpha:]]+\]/d' file
 Names of students
[ThisShouldNotBeBeRemoved]
End of all names
Blablabla

答案 3 :(得分:0)

你错过了什么,

sed '/\[Name:.*\]/d' file > new-file

这会删除匹配的行。

.*  This matches any character zero or more than once.

答案 4 :(得分:0)

如果您不想创建新文件,请尝试此操作,

sed -i'/ [名称:。*] / d'文件