使用Unix工具将多个换行符替换为只有2个换行符。

3
我尝试寻找正确的方法来实现从标准输入读取并打印到标准输出。我知道可以使用squeeze (-s)删除多行相同类型的文本,但是我想在多个文本行的位置上留下两个换行符,而不仅仅是一个。我也尝试使用uniq,但不确定如何操作。我知道还可以使用fold,但是我找不到我想要的fold版本,即fold (1p)。
因此,如果我有文本作为输入:
    A B C D 



    B C D E

我希望输出的结果会变成:
    A B C D 

    B C D E 
2个回答

5
您可以这样使用awk:
awk 'BEGIN{RS="";ORS="\n\n"}1' file

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

根据 awk 手册:

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

这意味着上述命令将输入文本按照两个或多个空行进行分割,并使用正好两个新行将它们重新连接起来。


0

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

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

OR

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接