Buscar y reemplazar un texto desde la terminal

Uno podría suponer que una tarea de buscar una cadena de texto y reemplazarla desde un programa editor sería una tarea trivial, pero hay veces que no.

El otro día tuve la necesidad de reemplazar una cadena por otra en un archivo de texto simple y llano, nada fuera de lo ordinario, para esto estaba utilizando el editor Atom y según la búsqueda de la cadena tenía un total de un poco más de mil coincidencias, pulsé el botón Replace All  y nada pasó !!!
Dejé pasar un poco de tiempo y nada, para colmo si intentaba “apresurar” el proceso recibía como respuesta un mesaje de Editor is not responding.

Editor is not responding - Reemplazar el texto de un archivo desde la terminal
Al parece el editor estaba demasiado ocupado para atenderme.

Intenté bajar la apuesta usando un editor más simple, lo intenté con gedit y el resultado fue muy similar. Al menos Atom presentaba mejor el archivo y podía trabajar más a gusto con el archivo, pero al llegar al momento de buscar y reemplazar era jugar un albur. A veces lo lograba si presionaba el botón Keep Waiting , pero otras veces no.

Mi computadora tiene recursos más que suficientes para completar la tarea, me parecía imposible que una simple búsqueda y sustitución de una cadena de texto representara tal reto. Además si iba a hacer esto de manera rutinaria tenía que encontrar una solución más eficiente.

Domina la terminal, domina el mundo.

Al principio pensé en utilizar un editor más ligero pero no puede haber nada más ligero que la terminal y supuse que debería de existir algún comando que hiciera la tarea.

Para buscar y reemplazar un texto desde la terminal use el comando sed (stream editor for filtering and transforming text) que con una instrucción muy sencilla hizo el trabajo en menos de un segundo !!!

sed -i 's/original/nuevo/g' archivo.txt

Donde:

  • -i (in place) Es decir, el resultado lo guarda en el archivo original.
  • s (substitute) Busca una cadena y lo que encuentra lo reemplaza por otra.
  • original Es la cadena de texto que va a buscar
  • nuevo Es la cadena de texto que va a sustituir a original
  • g Quiere decir global, o sea que hará el cambio en todas las coincidencias que encuentre en el archivo
  • Y por último archivo.txt es el nombre del archivo sobre el cual va a trabajar.

O si lo prefiere, puede aplicar este mismo comando a todos los archivos txt usando comodines y créanme que esto puede ahorrar mucho tiempo.

sed -i 's/original/nuevo/g' *.txt

Y este es tan solo un ejemplo de lo que puede hacer sed, tiene una gran variedad de opciones incluyendo el uso de expresiones regulares y lo mejor es que si es necesario, se puede programar en bash para automatizar tareas que de otro modo se tardarían una eternidad.

Guardaré este comando en mi caja de herramientas linuxeras hasta que lo vuelva a necesitar, por el momento fue de gran ayuda.

El método vi (actualización)

Poco tiempo después de publicar este artículo el buen amigo Rodolfo Zola hizo un comentario en el que me recomienda el uso de vi que también es editor de textos de terminal. Curiosamente la instrucción es muy similar a la de sed.

buscar y reemplazar con vim
Igual de rápido que el comando sed.

En el ejemplo pueden ver que sustituye la cadena em por am en un texto Lorem Ipsum de buen tamaño y lo hizo instantáneamente.

4 comentarios en “Buscar y reemplazar un texto desde la terminal”

  1. Que tal!, tuve un problema similar recientemente, sabía que se podía hacer algo por medio de la consola, sin embargo no investigué al respecto (ya que no me super-urgía).

    Al igual que tu, el equipo de cómputo era más que suficiente para tan sencilla tarea. Uso Linux “ChaletOS” muy ligerito, y el texto lo estaba manipulando a través de LibreOffice, y nunca terminaba de realizar los reemplazos.

    Al día siguiente transporté mis archivos a la oficina (con Win2) y el office… casi de manera inmediata terminó con la tarea!!!

    Vale decir que las características de mi equipo de cómputo en la oficina es más discreto.

    Regresando a casa intenté incrementar la memoria que ocupa el LibreOffice, y aunque hacía los reemplazos… tardaba una eternidad…

    En fin, para mí no es tarea cotidiana, pero intentaré hacerme un tiempecito e investigar al respecto.

    Un saludo!!

    Responder
    • Hola Carlos,

      Definitivamente algo esta pasando que no es normal :). ¿Cuál entorno de escritorio usa ChaletOS ? es la primera vez que escucho esa distribución.Investigaré un poco más sobre el tema para ver si puedo dar con el culpable o una solución más definitiva.

      Saludos.

      Responder
      • Francisco, ChaletOS lo encontré sin querer navegando por internet, su entorno gráfico es XFCE, y su aspecto (si así lo quieres) es muy, pero muy similar al windows 7 u 8 (configurable), para hacer más fácil la migración de usuarios Win2 a Linux.

        Y es muy ligerito!

        Responder

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.