2011-01-10 17 views
5

¿Cómo usar sed para eliminar solo las líneas triples vacías?¿Cómo usar sed para eliminar solo las líneas triples vacías?

Por ejemplo:

MyText.txt

 
line1 

line2 


line3 



line4 

con el uso de sed quiero que el resultado se vea como este
MyText.txt

 
line1 

line2 


line3 
line4 

estaba capaz de eliminar líneas dobles vacías con

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

Sin embargo, mi objetivo es eliminar las líneas triples vacías y solo triplicar las líneas vacías.

Cualquier ayuda sería muy apreciada.

Respuesta

4

Es tan simple como:

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

esto es mucho más corto, thx –

0

El siguiente código elimina sólo tres (ni más ni menos) líneas vacías consecutivas:

$ 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

funcionan como un encanto, thx –

1

¡No es sed, pero es mucho más corto que lo que puede hacer con 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

Si permite que awk soluciones, se puede hacer i t me gusta esto:

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