Insertar una cadena al final justo antes de la última línea de un archivo mediante sed - Electronik-Pro, Informatica, Noticas,Wordpress,Facebook,Hacking,Programas,Hosting,Dominios

En muchas ocasiones tenemos que insertar, mediante bash, una cadena de texto al final de un archivo, justo antes de la última línea, como por ejemplo, en el archivo /etc/rc.local o /etc/gdm3/PostSession/Default, donde hay que insertar los comandos antes de la línea que dice: "exit 0".

En linux tenemos muchas formas de hacerlo, pero para mí la más sencilla es ésta:

# sed -i '$ i\cadena' archivo

Vamos a verlo con un ejemplo:

Si quiero lanzar ocsinventory-agent en el inicio de una máquina, tengo que hacer una llamada a ocsinventory-agent en el archivo /etc/rc.local.

El archivo /etc/rc.local tiene por defecto el siguiente contenido:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

Como lo que necesito es insertar la cadena "ocsinventory-agent" justo antes de la línea que dice "exit 0", lo que tengo que hacer es ejecutar el siguiente comando:

# sed -i '$ i\ocsinventory-agent\n' /etc/rc.local

Como se puede ver, inserto in-line ( parámetro -i) la cadena ocsinventory-agent y un salto de línea en el archivo /etc/rc.local.

Después de ejecutar el comando, el archivo quedaría así:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

ocsinventory-agent

exit 0

Un detalle importante: Debemos tener cuidado si ejecutamos el comando más de una vez porque estaremos insertando varias veces la misma cadena. Si queremos ejecutar el comando dentro de un script, de tal manera que la cadena se inserte tan sólo una vez, deberíamos controlarlo de algún modo. Por ejemplo, así:

# grep -q ocsinventory-agent /etc/rc.local 2> /dev/null || sed -i '$ i\ocsinventory-agent\n' /etc/rc.local

De este modo, la inserción sólo se realizará cuando la cadena no estuviera ya insertada en el archivo.

0 comentarios:

Publicar un comentario

 
Top