只删除第一个空行 sed

只删除第一个空行 sed

这里有类似的问题,但没有一个完全符合我的问题。

如何使用 sed 仅删除文件中的第一个空行?

假设我有

a

b

c

而且我要

a
b

c

作为输出。

答案1

查看sed常见问题解答这里:

$ sed '0,/^$/{//d}' lines
a
b

c

d

请注意,这只会删除真正的空行,如果您想考虑带有空格的行,您将使用

$ sed '0,/^[[:space:]]*$/{//d}' lines

反而。

答案2

您可以使用sed读取第一个空行,然后使用cat读取其余行,这对于大文件来说是最有效的:

{ sed -n '/./!q;p'; cat; } < the-file

但它仅适用于常规文件(不适用于管道,因为按块读取数据,如果输入不可查找,sed则无法查找到调用后的行)。q正如 @peterph 所指出的,在 GNUsed版本 4.2.2 及更高版本中,您可以添加-u标志,使 GNUsed一次读取一个字节的输入(并一次输出一行)并消除管道问题(尽管会降低性能)表现)。

相关内容