Cómo encontrar y reemplazar texto en varios archivos desde el terminal

Buscar y reemplazar texto puede ser una tarea sencilla utilizando los editores de texto más básicos. Pero, ¿qué sucede cuando es necesario hacer esa misma tarea en varios archivos al mismo tiempo?

Bueno, ahí la cosa se complica… o no tanto.


En el siguiente ejemplo, usaremos sed para reemplazar todas las ocurrencias de la palabra «mongo» por la palabra «aurelio» en todos los archivos que tengan la extensión .txt y que se encuentren en la carpeta /home/usuario/micarpeta/.

find /home/usuario/micarpeta/ -name *.txt -exec sed -i "s/mongo/aurelio/g" {} \;

Así de fácil…

Antes de terminar, vale la pena mencionar que algunos editores de texto permiten realizar esta operatoria utilizando una interfaz gráfica. Entre otros, cabe destacar a Jedit, Geany, Regexxer, etc.


Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   TSH dijo

    super

  2.   Esceptic0 dijo

    yo uso el Gedit

    1.    mrlon dijo

      gedit para multiples archivos??? como???

  3.   ron dijo

    Como podria poner un grep entremedio ai ?

    Lo que necesito es hacer lo siguiente , buscar dentro de home todos los archivos que se llamen index.html y que contengan la palabra «XXXXXXX» , y reemplazarlo con «YYYYYYYYYY» , como se podria hacer para que busque solo en los archivos que realmente tengan la string ?

    Muchas Gracias !

  4.   MelhorHospedagem dijo

    Yo uso el Gedit tambien, mas muchas gracias

  5.   Angel Garcia dijo

    Te falta el argumento para exec. El codigo correcto seria:
    find /home/usuario/micarpeta/ -name *.txt -exec sed -i «s/mongo/aurelio/g» {} \;

    Un saludo 😀

    1.    usemoslinux dijo

      Tenés razón! Gracias!
      Ya lo corregí. :=)

  6.   Gardo dijo

    Recien acabo de probar esto (como ROOT):

    find /usr/share/icons/ACYL-Allgray/ -name *.svg -exec sed -i «s/666666/000000/g» {} \;

    para cambiar el color de todo un set de iconos. La verdad que es un comando muy poderoso, normalmente esta tarea me habría tomado horas editando archivo por archivo.

  7.   Edmundo dijo

    Insertar texto en varios archivos, segun el numero de la linea, en mi caso linea 2 (2i), en centos linux

    find /home//public_html/res/ -name -exec sed -i «2i\;» {} \;

    1.    Edmundo dijo

      no salio todo el codigo asi que reenvio:

      find /home/user/public_html/res/ -name nombrearchivo.ext -exec sed -i «2i\texto a insertar» {} \;