Ir al contenido

6 noviembre, 2009

Reemplazar cadenas en múltiples archivos

Para cualquier administrador de un sistema es muy común en muchas oportunidades encontrarse con la necesidad de cambiar una frase determinada en múltiples archivos de texto. Un ejemplo sería si cambiamos la IP de una máquina y luego debemos modificarla también en la configuración de múltiples servicios. Existen básicamente dos maneras de hacerlo: a mano, editando archivo por archivo, o automáticamente, mediante un script.

A continuación, valiéndonos sólo de comandos estándares de Unix realizaremos dicha tarea mediante el siguiente script. Supondremos que deseamos modificar la IP 192.168.1.5 por la 192.168.2.5 en todos los archivos que estén en el directorio /etc.

cd /etc
for i in `grep -R "192.168.1.5" * | cut -d : -f 1 | uniq`; do
sed -i s/"192.168.1.5"/"192.168.2.5"/g $i
done

Veamos qué hace el script anterior. La línea del grep busca recursivamente en todos los directorios aquellos archivos que contengan la cadena “192.168.1.5″, luego el cut se queda de esa línea sólo con el nombre del archivo y el uniq evita que el nombre del archivo aparezca repetido. Esto ocurriría si la cadena en cuestión aparece en más de una línea en algún archivo.

El sed es el que realiza el trabajo realmente. Veamos que se encuentra dentro de un bucle y va a ejecutarse para cada uno de los archivos encontrados por el comando grep. El primero de sus parámetros le indica que realice las modificaciones en el mismo archivo ya que el comportamiento por defecto es imprimir su contenido con los cambios en pantalla, pero sin modificarlo; en el segundo parámetro encontramos la letra s que dice que debe reemplazar la primer cadena por la segunda y la letra g indica que lo haga para todas las ocurrencias de la misma; el tercer parámetro es el archivo sobre el cuál se aplicará el sed, en este caso la variable $i.

Posts relacionados:

¿Qué opinas?, introduce un comentario.

(required)
(required)

Nota: Se permite código HTML. Tu correo electrónico nunca será publicada.

Suscríbete a los comentarios

Spam Protection by WP-SpamFree