使用 unix 实用程序仅用 2 个换行符替换多个换行符

Replace multiple newlines with just 2 newlines using unix utilities

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

因此,如果我将文本作为输入:

    A B C D 



    B C D E

我希望输出为

    A B C D 

    B C D E 

以下 awk 可能会对您有所帮助。

awk -v lines=$(wc -l < Input_file) 'FNR!=lines && NF{print [=10=] ORS ORS;next} NF' Input_file

awk -v lines=$(wc -l < Input_file) 'FNR!=lines && NF{[=11=]=[=11=] ORS ORS} NF' Input_file

你可以这样使用 awk:

awk 'BEGIN{RS="";ORS="\n\n"}1' file

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

来自 awk 手册:

If RS is null, then records are separated by sequences consisting of a newline plus one or more blank lines

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