我在文件中有以下文字:
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
我还有其他办法吗?
答案 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'文件