Mostrando entradas con la etiqueta scripting. Mostrar todas las entradas
Mostrando entradas con la etiqueta scripting. Mostrar todas las entradas

lunes, 28 de marzo de 2011

Eliminar un bloque de línea con sed saltándose unas líneas desde la línea que hace match

Por ejemplo tengo un fichero con el siguiente formato:

ficheroEntrada.txt:

aaaaaaaaa
una línea
primera línea q quiero eliminar
segunda línea q quiero eliminar
tercera línea q quiero eliminar
otra línea
...
aaaaaaaaa
una línea
primera línea q quiero eliminar
segunda línea q quiero eliminar
tercera línea q quiero eliminar
otra línea
...


Quiero/puedo encontrar las líneas con el patrón "aaaaaaaaa", y a partir de cada una, quiero eliminar el bloque de 3 líneas que se encuentran saltando 1 línea desde la línea que encajó con el patrón de búsqueda.

Para ello puedo ejecutar el siguiente script:

cat ficheroEntrada.txt | sed -e '/aaaaaaaaa/ {n;n;N;N;d}' > ficheroSalida.txt


Para cada línea que contiene el patŕon "aaaaaaaaa":

  • Con el primer n salta a la siguiente línea tras la línea que hizo match.

  • Con el segundo n alcanza la primera línea que nos interesa, desechando la anterior.

  • Avanza dos líneas más, pero esta vez agregándolas al pattern space. Por cada línea que agrega, mete delante de la línea el carácter salto de línea.

  • Una vez que hemos acumulado las 3 líneas que queríamos borrar en el pattern space, las borramos con el comando "d". Y aquí termina el ciclo de operaciones que se hace por cada línea "aaaaaaaaa" encontrada.