有选择地使用sed来删除行

时间:2015-02-18 16:47:09

标签: sed

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

Name
aaa
bbb
ccc
Name
xxxx
Name
yyyy
tttt

我想从文件中删除“Name”,除非它出现在标题中。我知道sed删除了行,但是如果我这样做

sed '/Name/d' file

删除所有“名称”。

所需的输出:

Name
aaa
bbb
ccc
xxxx
yyyy
tttt

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

3 个答案:

答案 0 :(得分:2)

如果您知道第一个标题位于第一行,请跳过它:

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

答案 1 :(得分:2)

使用此:

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

上一个命令适用于除第一行以外的所有行。

答案 2 :(得分:2)

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

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

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