有选择地使用 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
我有一个文本文件(比如文件)
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