¿Existe algún comando en Linux que encuentre una palabra en particular en todos los archivos en un directorio determinado y en las carpetas siguientes y la reemplace con una palabra nueva?
Respuesta1
Esto reemplazará en todos los archivos. Puede hacerse más específico si solo necesita un tipo específico de archivo. Además, crea un .bak
archivo de copia de seguridad de cada archivo que procesa, en caso de que necesite revertirlo. Si no necesita ningún archivo de respaldo, cámbielo -i.bak
a -i
.
find /path/to/directory -type f -exec sed -i.bak 's/oldword/newword/g' {} \;
Para eliminar todos los archivos de respaldo cuando ya no los necesite:
find /path/to/directory -type f -name "*.bak" -exec rm -f {} \;
Respuesta2
Puede utilizar el siguiente comando:
grep -lR "foo" /path/to/dir | xargs sed -i 's/foo/bar/g'
Se utiliza grep
para buscar archivos que contengan la cadena "foo" y luego invoca sed para reemplazar "foo" con "bar" en ellos. Como resultado, sólo se modifican aquellos archivos que contienen "foo". El resto de archivos no se tocan.
Respuesta3
No es un solo comando sino una combinación de varios:
find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} ;
Ejemplo deaquí
Respuesta4
Si desea tener más control, puede utilizar un script en Python como: