如何在匹配时仅使用sed有条件地删除第一行?

时间:2013-04-20 23:52:29

标签: sed

我可以使用sed检查某个命令输出的第一行(到stdout),如果它匹配某个模式,可以删除第一行吗?

说,命令的输出是这样的:

"AB"
"CD"
"E"
"F"

我希望它成为:

"CD"
"E"
"F"

但是当第一行是"GH"时,我不想删除该行。

我试过这个,但它不起作用:

<some_command> |sed '1/<pattern>/d'

贝壳告诉我:

sed: 0602-403 1/<pattern>/d is not a recognized function.

我只想使用sed来处理第一行,而不改变其他行。

这里的语法是什么?

4 个答案:

答案 0 :(得分:7)

这可能对您有用:

sed -e '1!b' -e '/GH/!d' file

答案 1 :(得分:5)

你想引用第一行,然后说删除:

$ sed '1 d' file

如果您知道要删除哪一行,则无需任何模式。

使用模式,请使用以下语法:

$ sed '0,/pattern/ d' file

答案 2 :(得分:3)

这就是你想要的:

$ sed '1{/"GH"/!d}' file

答案 3 :(得分:2)

sed '1{/<pattern>/{/GH/!d}}' input

表达式中的错误可以像这样修复:

sed '1{/<pattern>/d}' input