Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

Resulta que tengo que cambiar el contenido de muchos ficheros a la vez, resulta que en una función de desarrollo se llama getFuncion y ahora debe llamarse getFunction, buscar y cambiar el contenido de todos esos ficheros uno a uno, llevaría muchísimo tiempo, pero cambiar el contenido de todos esos ficheros a la vez es factible simplemente escribiendo:

find /etc -name * -exec sed -i "s/'getFuncion'/'getFunction'/g" {} \;

Pero también, puedes utilizarlo para resolver problemas de configuración y cambiar varios ficheros a la vez, pogamos también este ejemplo:

Me ha ocurrido que tengo que cambiar la IP de todos los ficheros de configuración del directorio /etc, así pues he decidido compartir este comando para que sepáis como hacerlo.

find /etc -name * -exec sed -i "s/'237.742.45.9'/'192.168.1.2'/g" {} \;

Así de fácil…

Si quieres probarlo, crea en varios ficheros de texto plano, llamados "uno.txt", "dos.txt", etc... algunos textos y cambialos, por ejemplo:

 

La línea general como funciona es: Cambiar en todos los ficheros del directorio /etc con extensión ".txt", el texto "Pepito" por el texto "José".

 find $HOME -iname *.txt -exec sed -i "s/'Pepito'/'José'/g" {} \;

Te recordamos que puedes cambiar la variable $HOME por ~, así, por ejemplo es lo mismo escribir $HOME/Documentos que ~/Documentos.

 

Si por alguna razón, el comando de arriba no funcionase, también se pueden dar estos siguientes pasos, en los que además se tiene más control del proceso.

1º Buscar los cambios a hacer:

grep -r "Pepito" (o grep -ir "pepito" Para no hacer diferencia entre mayúsculas y minúsculas.) *.tx

Por ejemplo, los ficheros uno.txt y dos.txt están en los directorios 1a y 1b, respectivamente si quisiéramos cambiar el contenido de todos ellos, "hola" por "adiós" con un script que controle el proceso (que es recomendable) podríamos hacer lo siguiente

Contenido del scrpt:

grep -ir "hola" * | awk '{print $1}' | sed s/':'/' '/g | awk '{print "sed -i \"s%hola%adiós%g\"", $1}' > acambiar.sh

Tras la ejecución, el script "acambiar.sh" tendrá el siguiente contenido:

sed -i "s%hola%adiós%g" 1a/uno.txt
sed -i "s%hola%adiós%g" 1b/dos.txt

Luego al script le daremos permisos de ejecución.

chmod a+x acambiar.sh
# Ejecutamos el script
./acambiar.sh

Y se cambia lo que quisiéramos.