Bash 使用unix实用程序将多个换行替换为2个换行

Bash 使用unix实用程序将多个换行替换为2个换行,bash,unix,newline,utility,utilities,Bash,Unix,Newline,Utility,Utilities,我试图寻找实现这一点的正确方法,从stdin读取数据并打印到stdout。我知道我可以使用挤压(-s)删除同一类型的多行,但我想在多行中保留两个换行符,而不仅仅是一行。我也考虑过使用uniq,但不确定如何使用。我知道折叠也可以使用,但我找不到我想要的折叠版本的任何信息,折叠(1p) 因此,如果我将文本作为输入: A B C D B C D E 我希望输出为 A B C D B C D E 下面的awk可能会对您有所帮助 awk -v lines=

我试图寻找实现这一点的正确方法,从stdin读取数据并打印到stdout。我知道我可以使用挤压(-s)删除同一类型的多行,但我想在多行中保留两个换行符,而不仅仅是一行。我也考虑过使用uniq,但不确定如何使用。我知道折叠也可以使用,但我找不到我想要的折叠版本的任何信息,折叠(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 $0 ORS ORS;next} NF' Input_file
awk-v行=$(wc-l

awk-v行=$(wc-l
您可以这样使用awk:

awk 'BEGIN{RS="";ORS="\n\n"}1' file
RS
是输入记录分隔符,
ORS
是输出记录分隔符

从awk手册:

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

这意味着上面的命令将输入文本拆分为两行或多行空行,并用两行换行符再次连接

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