Buscar y Reemplazar Cadenas en Diferentes Ficheros con Linux

Hace poco me encontré con la necesidad de reemplazar una cadena de texto en una gran cantidad de ficheros PHP distribuidos en diferentes subcarpetas. Después de algunas búsquedas e intentos fallidos encontré el siguiente comando que me permitió lograrlo con relativa sencillez:

find /home/miguel -name "*.php" -print | xargs sed -i 's/foo/bar/g'

Este comando buscará todos los ficheros PHP en la carpeta ‘/home/miguel’ y sus subcarpetas y en cada uno sustituirá todas las ocurrencias de la cadena ‘foo’ con la cadena ‘bar’.

Como podemos observar el comando consta de diferentes componentes:

  1. find /home/miguel -name "*.php" -print -> Este comando se encarga de encontrar todos los ficheros de tipo PHP que se encuentran dentro de la carpeta /home/miguel y sus subcarpetas mostrando las rutas absolutas por pantalla.
  2. xargs permite enviar diferentes argumentos a un mismo comando, de tal forma que para cada fichero encontrado por find, se ejecutará un comando nuevo relacionado con el mismo. En este caso se pasara como argumento al comando sed.
  3. sed -i 's/foo/bar/g' -> sed (Stream Editor) permite realizar transformaciones de texto en una fuente de datos de entrada. En este caso, sustituirá la cadena ‘foo’ por la cadena ‘bar’ en todas las ocurrencias de cada fichero que se le pase como argumento.

A continuación os dejo enlaces con más información de los diferentes comandos utilizados:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

1 respuesta

  1. Adrian dice:

    Aquí os dejo otro enlace con 10 ejemplos mas en castellano que he encontrado:

    http://www.sysadmit.com/2015/12/linux-buscar-ficheros-directorios-con-find.html