【问题标题】:Howto use sed to remove only triple empty lines?如何使用 sed 仅删除三个空行?
【发布时间】:2011-06-06 19:12:02
【问题描述】:

如何使用 sed 只删除三个空行?

例如:

MyText.txt

第1行 线2 第 3 行 第 4 行

使用 sed 我希望结果看起来像这样
MyText.txt

第1行 线2 第 3 行 第 4 行

我可以用

删除双空行 sed -i '/^$/{ ñ /^\n$/D }' MyText.txt

但是我的目标是删除三个空行,并且只删除三个空行。

任何帮助将不胜感激。

【问题讨论】:

    标签: linux sed


    【解决方案1】:

    以下代码仅删除三个(既不多也不少)连续的空行:

    $ printf "%s\n" foo "" bar "" "" baz "" "" "" cow "" "" "" "" moe |
          sed '
            /^$/{ 
                N;
                /^\n$/{
                    N;
                    /^\n\n$/{
                        $ d; 
                        N;
                        s/\n\n\n\(.\)/\1/
                    }
                }
            }' 
    foo
    
    bar
    
    
    baz
    cow
    
    
    
    
    moe
    

    【讨论】:

      【解决方案2】:

      它不是 sed,但它比你可以用 sed 做的要短得多:

      $ printf 'a\nb\n\nc\n\n\nd\n' | 
        perl -e 'undef $/; $_ = <>; s/\n\n\n/\n/g; print'
      a
      b
      
      c
      d
      

      【讨论】:

        【解决方案3】:

        很简单:

        sed '1N;N;/^\n\n$/d;P;D'
        

        【讨论】:

          【解决方案4】:

          如果您允许awk 解决方案,您可以这样做:

          awk -v RS='\n\n\n\n' 1 Text.txt
          

          【讨论】:

          • 非常聪明简洁。
          猜你喜欢
          • 1970-01-01
          • 2012-09-04
          • 2013-05-01
          • 1970-01-01
          • 2011-03-21
          • 1970-01-01
          • 2011-05-25
          • 2016-10-23
          • 2017-03-27
          相关资源
          最近更新 更多