Sustituir texto en múltiples ficheros en Linux

ReemplazarBueno, aquí un post que empecé a escribir a principios del 2012, con algunos comandos útiles para sustituir texto en Linux, que siempre viene bien tener a mano. Hay que tener en cuenta, que la sustitución de texto en Linux se puede hacer de muchas formas diferentes. A continuación explico uno de los posibles métodos para sustituir texto.

Sustitución múltiple en un único fichero con vi

Si se quiere reemplazar tanto BUG como bug como cualquier combinación de mayúsculas y minúsculas de BUG por ISSUE, bastará con abrir el fichero con «vi» y ejecutar lo siguiente:

:%s/BUG/ISSUE/gi

Es importante notar que para ejecutar el comando, deberemos estar fuera del modo de inserción, para poder introducir los dos puntos del inicio del comando. La «i» del final es la que hace que el texto a buscar sea case insensitive.

Sustitución múltiple en múltiples ficheros dentro de un mismo directorio

Si tenemos decenas de archivos dentro del directorio /test, podremos crear un script en bash parecido al siguiente y ejecutarlo:

#!/bin/bash

directory=/test/*
for file in $directory
do
         perl -p -i -e "s/BUG/ISSUE/gi" $file
done

Este script, buscará todos los ficheros dentro del directorio /test, y sustituirá la cadena de texto buscada. Sin embargo, el script no buscará en los subdirectorios de /test, únicamente se quedará en ese primer nivel.

Sustitución múltiple en múltiples ficheros con mismo nombre, en diferentes ubicaciones

Podemos usar find para buscar ciertos ficheros. Por ejemplo, en mi caso, he querido modificar una línea del fichero main.cf (fichero de configuración de postfix) en un server con cientos de postfixs (por tanto, he querido modificar cientos de ficheros llamados main.cf). En mi caso, los directorios del postfix están en /etc, así que con find he buscado todos los ficheros main.cf, en cualquier subdirectorio dentro del directorio /etc, y a partir de ahí he realizado la sustitución:

#!/bin/bash

directory=`find /etc -iname main.cf`
for file in $directory
do
         perl -p -i -e "s/BUG/ISSUE/gi" $file
done

Hay muchas más maneras de realizar sustituciones múltiples en diversos ficheros, pero a mi éstas me sirven.

Flickr! Foto por FaceMePLS

Deja una respuesta

Tu dirección de correo electrónico no será publicada.