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

时间:2018-04-05 04:33:35

标签: bash unix newline utility utilities

我试图找到正确的方法来实现这一点,从stdin读取并打印到stdout。我知道我可以使用squeeze(-s)删除多个相同类型的行,但我想留下两个换行符,而不只是一行。我也考虑过使用uniq,但我不确定如何使用uniq。我知道折叠也可以使用,但我找不到任何关于我想要的折叠版本的信息,折叠(1p)。

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

    A B C D 



    B C D E

我希望输出改为

    A B C D 

    B C D E 

2 个答案:

答案 0 :(得分:3)

您可以像这样使用awk:

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

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

来自awk手册:

  

如果RS为null,则记录由包含换行符和一个或多个空行

的序列分隔

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

答案 1 :(得分: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