Una de las tareas más tediosas con las que se enfrenta un programador habitualmente es la de reemplazar texto dentro de todo un proyecto. Podemos recurrir a las herramientas de "sustituir texto en todo el directorio" de nuestro editor de textos favorito o reemplazar texto recursivamente con el comando sed desde consola.


La sintaxis habitual de sed es:

sed -i "s/texto_original/texto_nuevo/g" fichero

El parámetro i hace que sed escriba el archivo sobre el que está leyendo el texto, si no se le indica, imprime el resultado por la salida estándar. El texto tiene que estar correctamente escapado.

Para reemplazar el texto1 por el texto2, de forma recursiva, dentro de todos los subdirectorios del directorio de trabajo, tenemos que hacer uso del comando find como se indica a continuación:

find ./directorio | xargs sed -i "s/texto1/texto2/g"

Veamos un ejemplo práctico:

En un proyecto php, que está en el directorio iteracion42, necesitamos sustituir todas las referencias al dominio iteracion42.com por google.es:

find /var/www/iteracion42/ -name "*.php" | xargs sed -i "s/iteracion42.com/google.es/g"