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

时间:2011-01-10 21:15:16

标签: linux sed

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

例如:

MyText.txt

line1

line2


line3



line4

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

line1

line2


line3
line4

我能够用

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

但是我的目标是删除三条空行,只删除三条空行。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:4)

这很简单:

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

$ 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