Inicio > Linux, Shell > Cómo buscar y reemplazar en la shell de linux

Cómo buscar y reemplazar en la shell de linux

Explico a continuación como buscar y reemplazar recursivamente cadenas de texto, en uno o varios archivos usando los comandos de la Shell de Linux.

Fórmula:
list=`grep -l -R "cadena1" *`
for i in $list; do sed 's/cadena1/cadena2/g' -i $i; done;

Comandos utilizados:

  • grep
  • sed

grep: El comando grep se usa generalmente para buscar cadenas de texto dentro de otras cadenas o archivos. Aquí lo utilizaremos para obtener la lista de archivos que contienen la cadena a buscar y reemplazar así:

grep -l -R "cadena de texto" *

  • -l  = imprime la ruta y nombre del archivo
  • -R =  busca recursivamente en los directorios
  • «cadena de texto» = cadena de texto a buscar
  • * =  todos los archivos del directorio actual (También se le puede especificar la ruta donde buscar. p.e. /home/usuario/documentos)

sed: El comando sed se usa generalmente para reemplazar cadenas así:

sed 's/cadenaABuscar/CadenaDeReemplazo/g' -i archivo

  • 's/cadenaABuscar/CadenaDeReemplazo/g' = Expresión regular
  • -i = input (para especificar el archivo a procesar)
  • archivo = dirección y nombre del archivo

Ahora veamos como integrar estos dos comandos:

Lo haremos usando el ciclo for así:

Primero definimos una variable que contenga la lista de archivos a procesar así:

list=`grep -l -R "cadena1" *`

  • list = nombre de la variable
  • `grep -l -R "cadena1" *` = comando grep dentro de comillas invertidas

Luego recorremos la lista de archivos en la variable $list con el ciclo for y reemplazamos la cadena así:

for i in $list; do sed 's/cadena1/cadena2/g' -i $i; done;

  • for i in $list; =   para i en $list
  • do sed 's/cadena1/cadena2/g' -i $i; =  haga  el reemplazo de la cadena1 por la cadena2 en el archivo $i
  • done; = Fin del ciclo
Forma corta:
grep -lr -e "cadena_inicial" * | xargs sed -i "s/cadena_inicial/cadena_final/g"

Y listo! esto es todo… ¿Fácil no?

Que la shell de linux te acompañe… 😉

Categorías: Linux, Shell
  1. No hay comentarios aún.
  1. No trackbacks yet.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: