【问题标题】:Substitute two empty lines in a file with one empty line用一个空行替换文件中的两个空行
【发布时间】:2018-03-20 01:24:13
【问题描述】:

这是 example1 的输入:

a


b

然后输出:

a

b

这是example2的输入:

a




b

还有输出:

a


b

但是,文件很大。我试过的:sed 's/\n\n/\n/g' file amd cat file | tr '\n' '\t' | sed 's/\t\t/\t/g' | tr '\t' '\n'

【问题讨论】:

  • 如果有3个或更多相邻的空行怎么办?您是否需要将每对空行替换为单个空行?

标签: bash awk sed command-line grep


【解决方案1】:

sed 也可以

sed '/^$/N;/^\n$/ s/\n//' <your_filename>

将下一行(空后)读入模式空间,如果它也是空的,则删除 \n

【讨论】:

    【解决方案2】:

    如果您特别希望将两个\n\n 替换为一个\n,只需在gawk 中设置RS 即可:

    gawk 'BEGIN{RS="\n\n"} 1' file
    

    如果您想用单个\n 替换任意数量的\n,请将awk 设置为段落模式:

    awk 'BEGIN{RS="" } 1'
    

    【讨论】:

      【解决方案3】:

      sed 一次读取 1 个 \n-terminated 行,因此您不能执行 s/\n\n/anything,因为缓冲区中永远不会有任何 \ns。

      只需使用 awk:

      awk -v RS= '1' file
      

      上面将用一个空行替换所有空行序列。如果这不是您需要的,请更新您的示例。

      【讨论】:

        猜你喜欢
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        相关资源
        最近更新 更多