如何在unix shell脚本中的空行之后添加下一行到上一行

如何在unix shell脚本中的空行之后添加下一行到上一行

我有一个像下面这样的unix文件

abcdge
efg
bh

ggh
bhj
mkl

我想更改该文件并将其设置为:

abcdge
efg
bhggh
bhj
mkl

意思是:在每个空行之后,下一行应该附加到上一行。我怎样才能实现它?

答案1

$ sed -e '
    $!N;$q;N
    s/\n\n//
    P;D
 ' file

在模式空间中保留 3 行,并在看到连续的换行符时将其删除。

答案2

这将在每个 UNIX 机器上的任何 shell 中使用任何 awk 来工作:

$ awk '1;END{print"\n"}' RS= ORS= file
abcdge
efg
bhggh
bhj
mkl

答案3

如果我理解你,也许这就是你正在寻找的:

sed -z 's/\n\n//g' file

输出:

abcdge
efg
bhggh
bhj
mkl

答案4

<file awk '
   {
   if (n && $0!="")
      printf "\n"
   if ($0=="")
      n=""
   else
      {n=1; p=1; printf "%s", $0;}
   }
   END {if (p) printf "\n"}
 '

打印的每个非空行都没有终止换行符。在此之前,如果当前行不为空并且前一行也不为空,则会打印换行符;所以在这种情况下,前一行就完成了。

最后,如果打印了任何非空行,则一个换行符将终止最后一个不完整的行并使其完整。

np是分别指示“非空最后一行”和“打印了某些内容”的标记。

连续的空行相当于一个空行。我不知道这种行为是否是你想要的。

该溶液应能很好地用作过滤器(即在管道中)。如果您需要它来修改输入文件,请检查以下内容:将修改保存到位awk

相关内容