使用 UNIX 实用程序将多个换行符替换为 2 个换行符

z.r*_*ubi 3 unix bash utilities newline utility

我试图寻找正确的方法来实现这一点,从标准输入读取并打印到标准输出。我知道我可以使用挤压(-s)来删除相同类型的多行,但我想在许多行(而不仅仅是一行)中留下两个换行符。我也研究过使用 uniq,但不确定如何使用。我知道也可以使用折叠,但我找不到任何有关我想要的折叠版本折叠(1p)的信息。

所以,如果我有文本作为输入:

    A B C D 



    B C D E
Run Code Online (Sandbox Code Playgroud)

我希望输出是

    A B C D 

    B C D E 
Run Code Online (Sandbox Code Playgroud)

hek*_*mgl 5

您可以像这样使用 awk:

awk 'BEGIN{RS="";ORS="\n\n"}1' file
Run Code Online (Sandbox Code Playgroud)

RS是输入记录分隔符,ORS是输出记录分隔符。

来自 awk 手册:

如果 RS 为空,则记录由换行符加一个或多个空行组成的序列分隔

这意味着上面的命令将输入​​文本分割为两个或多个空行,并再次用两个换行符将它们连接起来。