这里有类似的问题,但没有一个完全符合我的问题。
如何使用 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
一次读取一个字节的输入(并一次输出一行)并消除管道问题(尽管会降低性能)表现)。