2011-01-10 18 views
5

Jak używać sed do usuwania tylko potrójnych pustych linii?Jak używać sed do usuwania tylko potrójnych pustych linii?

Na przykład:

MyText.txt

 
line1 

line2 


line3 



line4 

z użyciem sed chcę wynikiem wyglądać ten
MyText.txt

 
line1 

line2 


line3 
line4 

byłem możliwość usunięcia podwójnie pustych linii z

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

Jednak moim celem jest usunięcie potrójnych pustych linii i tylko potrójnych pustych linii.

Każda pomoc będzie mile widziana.

Odpowiedz

4

jest to tak proste, jak:

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

to jest dużo krótsze, thx –

0

Poniższy kod usuwa tylko trzy (ani mniej, ani więcej) kolejnych linii pustych:

$ 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

działa jak urok, thx –

1

To nie sed, ale jest o wiele krótsza niż to, co można zrobić z 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

Jeśli pozwolisz awk rozwiązań, można mogę t tak:

awk -v RS='\n\n\n\n' 1 Text.txt 
Powiązane problemy