Buscar y remplazar texto de forma masiva: comandos grep & sed

Me encontré con la necesidad de buscar y remplazar texto en todos algunos archivos de un directorio, [El problema] era que no sabia exactamente en cuantos archivos y en que partes del archivo encontraría este texto. Esto tardaría un par de horas hacerlo manualmente ya que habia mucho por donde buscar. Entonces la pregunta era ¿Existe alguna forma de hacerlo rapidamente con comandos?

[Solución] Para resolver esto debemos usar 2 comados muy utiles de un sistema operativo Linux. Los comandos grep y sed.

el comando grep lo usaremos para buscar y darnos cuanta cuanta información coincide con el texto que estamos buscando. Podria ser que el texto esta tambien en contenido que no deberiamos cambiar. el comando grep tiene mutliples funcionalidades bastante interesantes, pero para este caso usamos la siguiente sentencia:

grep -iRn --color 'juan' ./

Esta linea le pide al comando grep que:
-i : no discrimine entre mayusculas y minusculas al buscar.
-R: que busque tambien dentro de los directorios que pueda entrar dentro.
-n: que muestre la el numero de linea donde ha encontrado el texto.
--color: que muestre de un color marcado el texto buscado dentro de la linea encontrada.
'repository': es el texto a buscar
./: es el directorio donde debe buscar, en este caso es el directorio actual.

El resultado deberia salir algo asi:



La figura indica que hay varias coincidencias dentro de 3 archivos. sin embargo el resultado real tiene muchos mas archivos. Bien!, ya hemos encontrado las coincidencias, ahora ¿Como lo remplazamos?

El comando sed lo usaremos para remplazar el cotenido, con la siguiente estructura:
sed -i 's/[texto a buscar]/[texto a remplazar]/g' [archivo(s) donde remplazará]

Para nuestro caso, debiamos remplazar solo en los archivo de tipo .java, ya que hubo coincidencias en otro tipo de archivos, como logs, xml, txt y otros. Para esto ejecutamos :

sed -iR 's/juan/brian/g' *.txt

El resultado seria algo asi:


Es todo, ya tenemos los archivos remplazamos podemos verificarlo con el mismo comando grep buscando el nuevo texto. trabajo terminado en muy poco tiempo.

 Para terminar, comentar que existes muchas más cosas que se pueden hacer con el comando sed, por ejemplo, decirle que remplace solo 2 veces en cada archivo, o usar expresiones regulares, y otros cosas que en la práctica puedas necesitar.

Espero les sea de utilidad para su día a día.

Comentarios

Entradas populares de este blog

Gráfico de Burbuja 2 lados en R

Gestión de Tareas e incidentes con Bitbucket Issue Tracker