20 dic 2014

sed: Insertar una línea antes de un patrón determinado

En el post anterior mostrábamos un ejemplo en el que eliminábamos una línea del script /etc/rc.local para evitar la ejecución de un script en un momento determinado.
Ahora bien, puede que después de terminar la ejecución del procedimiento por el que necesitábamos cancelar la ejecución del script, nos interese volver a añadir la línea que habíamos eliminado.

En este caso, como sabemos que dicha línea debe ir justo antes del texto "exit 0", vamos a utilizar el comando sed para realice precisamente esta acción:
# sed -i '/exit 0 / i\/usr/sbin/sinc_puppet_inst &\n' /etc/rc.local
Publicado por primera vez en http://enavas.blogspot.com.es

sed: Borrar las líneas que contengan un patrón determinado

Una de las cosas para las que utilizo mucho el comando sed es borrar las líneas de un archivo que contienen un patrón determinado. 

Por ejemplo: En nuestras instalaciones tenemos un script sinc_puppet_inst que se ejecuta al final del proceso de arranque y no me interesa que este script se ejecute en una determinada situación. 

Podría utilizar el comando sed en un script que se inicie en uno de los runlevels para evitar la ejecución eliminando la línea y añadiéndola después cuando termine el proceso que quiero realizar.
Para eliminar la línea,  podemos hacer lo siguiente:
# sed -i  '/sinc_puppet_inst/ d' /etc/rc.local
Si os dáis cuenta, lo que va entre las barras "/" es el patrón a buscar. Y "d" le indica a sed que borre las líneas que contengan el patrón.

Otro de las cosas que podemos querer borrar es bloques de texto que contengan una estructura determinada. Por ejemplo:
# sed -i '/BEGIN/,/END/ d' /boot/grub/grub.cfg
El comando anterior borraría el bloque de líneas del fichero /boot/grub/grub.cfg que comienza por la palabra BEGIN y termina con la palabra END.
Publicado por primera vez en http://enavas.blogspot.com.es