verificación google

martes, 19 de junio de 2018

Buscar y reemplazar texto en bash

En muchas ocasiones me he encontrado con la necesidad de hacer un buscar reemplazar en el bash de linux. Hay muchas opciones para hacerlo, comentaré aquí algunas de las que yo utilizo por si a alguien la es de utilidad.

Utilizar editor nano desde bash para buscar y reemplazar un texto

La primera opción es utilizar un editor de texto cualquiera para hacer un buscar y reemplazar, yo utilizo nano por lo fácil y rápido que es. Te permite abrir fichero de texto muy pesados sin cargar demasiado tu equipo.

Una vez estas en nano simplemente presionas la combinación de teclas ctrl + w para buscar y después ctrl + r para reemplazar, esto te pedirá primero el texto a buscar, después el texto a reemplazar y para terminar preguntará si quieres reemplazar todas las coincidencias o únicamente la primera.





Una buena opción; crear un script /bin/bash para buscar y reemplazar un texto

Esta opción es muy útil cuando necesitamos hacer un buscar y reemplazar automatizado por ejemplo en un fichero de configuración. Yo lo utilizo en ficheros de configuración de apache para virtualhost, tengo una plantilla y cuando tengo que crear un nuevo virtualhost lo creo con un script automatizado de este estilo.
#!/bin/bash
primeraCadena="Amo con locura a mi hijo y a mi mujer."
segundaCadena="familia"
echo "${primeraCadena/hijo y a mi mujer/$segundaCadena}" 
Este script buscará en la cadena base "Amo con locura a mi hijo y a mi mujer." el texto "hijo y a mi mujer" y lo reemplazará por "familia", para después imprimir el resultado "Amo con locura a mi familia".

Esto puede ser útil pero cuando queremos hacer un buscar reemplazar en un fichero de configuración normalmente tenemos el mismo nombre en muchos sitios que tenemos que reemplazar (ficheros de configuración, ruta de directorios, nombre de dominios...). Para esto dejo aquí este pequeños script:
#!/bin/bash
apache=`cat apache.conf`
echo "${apache//instancia/$1}"
En primer lugar cargamos el fichero apache.conf en una variable, hay que destacar que las comillas utilizas son las comillas de ejecución y no las comillas de cadena de texto.

Después procedemos a reemplazar todas las palabras "instancia" por el primer parámetro que le pasamos en la ejecución del fichero.

El script tendríamos que ejecutarlo de la siguiente forma:
./buscar_reemplazar.bash nuevaInstancia
Su ejecución nos devolverá el contenido del fichero que necesitaremos para apache reemplazando la palabra "instancia" del fichero plantilla por "nuevaInstancia".

La opción más rápida; utiliza el comando sed para buscar y reemplazar textos

El comando sed es ampliamente utilizado en linux y lo puedes utilizar para escribir de forma sencilla y rápida una linea de comando para hacer un buscar y reemplazar en un fichero de texto.
sed -i 's/antigua/nueva/g' prueba.txt
Directamente con este simple comando buscará en el fichero prueba.txt todas las coincidencias con "antigua" y las reemplazará por "nueva". El resultado quedará guardado en el mismo fichero gracias al modificador " -i ".

Si prescindimos de este modificador obtendremos el resultado por la salida estandar de la consola. Y podemos desviar éste resultado a un fichero.
sed 's/antigua/nueva/g' prueba.txt > resultado.txt

No hay comentarios:

Publicar un comentario