代码之家  ›  专栏  ›  技术社区  ›  z.rubi

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

  •  2
  • z.rubi  · 技术社区  · 6 年前

    我试图寻找实现这一点的正确方法,从标准输入法(stdin)读取数据并打印到标准输出(stdout)。我知道我可以使用挤压(-s)删除相同类型的多行,但我想在多行中保留两行新行,而不仅仅是一行。我也考虑过使用uniq,但不确定如何使用。我知道fold也可以使用,但我找不到任何关于我想要的fold版本fold(1p)的信息。

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

        A B C D 
    
    
    
        B C D E
    

    我希望输出为

        A B C D 
    
        B C D E 
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   hek2mgl    6 年前

    您可以这样使用awk:

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

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

    awk手册:

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

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

        2
  •  0
  •   RavinderSingh13    6 年前

    下列的 awk 可能对你也有帮助。

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

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