如何删除从第 5 行开始的空行

Mic*_*ant 10 sed

我有这个:

sed -i '/^$/d' temp_spec.rb
Run Code Online (Sandbox Code Playgroud)

这是剥离空行并且运行良好。我怎样才能让它只对第 5-999 行(或理想情况下 5 行到文件尾)执行此操作。

我试过:

sed -n5,999 -i '/^$/d' temp_spec.rb
sed '5,999!d/^$/d' temp_spec.rb
Run Code Online (Sandbox Code Playgroud)

但都没有工作(没有错误)。

Uwe*_*Uwe 12

如果要删除第 5 行开始的所有空行并保留第 1 至 4 行,可以使用

sed -i '5,${;/^$/d;}' temp_spec.rb
Run Code Online (Sandbox Code Playgroud)

{是操作者的分组,所以第一个命令5,${的意思是“从5行,直到输入结束($)执行以下命令直到匹配的}”。{和之间的命令}可以再次以地址为前缀,因此内部命令的/^$/d意思是“如果行的开头(^)和结尾($)之间没有任何内容,则将其删除”。sed 命令可以用;. (这是 sed 的一个记录不佳的功能。大多数 sed 实现都支持它,但它并不完全可移植。)正如 Hauke 所指出的,;after{是可选的;不过,前一个}是必需的。

如果要删除从第 5 行开始的所有空行并删除第 1 到 4 行,则更简单:

sed -i '1,4d;/^$/d' temp_spec.rb
Run Code Online (Sandbox Code Playgroud)