2011-01-10 41 views
5

如何使用sed删除三条空行?如何使用sed删除三重空行?

例如:

MyText.txt

 
line1 

line2 


line3 



line4 

配合使用的sed我想要的结果看起来像这样
MyText.txt

 
line1 

line2 


line3 
line4 

我能够删除双空行

 
sed -i '/^$/{ 
N 
/^\n$/D 
}' MyText.txt 

但是我的目标是删除三重空行和三重空行。

任何帮助将不胜感激。

回答

4

,因为它是那么简单:

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

这是很多很短,thx – 2011-01-11 22:28:50

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 
+0

工作就像一个魅力,thx – 2011-01-10 21:57:56

1

这不是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 
1

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

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