2011-01-10 6 views
5

Как использовать sed, чтобы удалить только тройные пустые строки?Как использовать sed, чтобы удалить только тройные пустые строки?

Например:

MyText.txt

 
line1 

line2 


line3 



line4 

с использованием СЭД я хочу, чтобы результат выглядеть следующим образом
MyText.txt

 
line1 

line2 


line3 
line4 

Я был возможность удалять двойные пустые строки с помощью

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

Однако моя цель - удалить три пустые строки и только тройные пустые строки.

Любая помощь будет высоко оценена.

ответ

4

Это так просто, как:

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

это целая серия короче, thx –

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 –

1

Он никогда не СЭД, но это намного меньше, чем то, что вы можете сделать с СЭД:

$ 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 решения, можно ли я t нравится это:

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