有选择地使用 sed 删除行

Using sed selectively to delete lines

我有一个文本文件(比如文件)

Name
aaa
bbb
ccc
Name
xxxx
Name
yyyy
tttt

我想从文件中删除 "Name",除非它出现在 header 中。我知道 sed 删除行,但如果我这样做

sed '/Name/d' file

它删除所有 "Name"。

期望的输出:

Name
aaa
bbb
ccc
xxxx
yyyy
tttt

你能建议我应该使用哪些选项吗?

如果你知道第一个header在第一行,就这样跳过:

sed '1!{/Name/d}' infile

这意味着该模式应应用于除第 1 行以外的所有行。

或者反过来:

sed -n '2,${/Name/d};p' infile

也许 awk:

 awk '/Name/ && c++ == 0 || !/Name/' infile

所有情况下的输出:

Name
aaa
bbb
ccc
xxxx
yyyy
tttt

使用这个:

sed '1!{/Name/d}' file

前面的命令适用于除第一行以外的所有行。

您可能会发现 awk 语法更直观:

awk 'NR==1 || !/Name/' file

上面只是说if it's line number 1 or the line doesn't include "Name" then print it