7

我可以sed用来检查某些命令输出的第一行(到标准输出)并在它与某个模式匹配时删除第一行吗?

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

"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

4 回答 4

7

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

$ sed '1 d' file

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

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

$ sed '0,/pattern/ d' file
于 2013-04-21T00:27:17.220 回答
7

这可能对您有用:

sed -e '1!b' -e '/GH/!d' file
于 2013-04-21T00:35:30.187 回答
4

这就是你想要的:

$ sed '1{/"GH"/!d}' file
于 2013-04-21T00:11:42.310 回答
3
sed '1{/<pattern>/{/GH/!d}}' input

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

sed '1{/<pattern>/d}' input
于 2013-04-21T00:48:10.497 回答