¿Cómo "buscar y reemplazar" muchos archivos?

11

Uso el grepcomando para buscar una cadena en muchos archivos. ¿Hay algo similar a "buscar y reemplazar"?

Tom Brito
fuente

Respuestas:

19

Estás buscando el sedcomando. Por ejemplo, para reemplazar el "perro" con "gato" en todos los archivos de texto en el directorio actual:

sed -i 's/dog/cat/' *.txt
Jjed
fuente
1
Simple y agradable
Luis Alvarado
1

sed viene a la mente. Ejemplo:

sed s/cat/dog/ <input >output

Esto busca gato en una línea y coloca al perro en su lugar en la entrada del archivo y escribe en la salida del archivo.

Kerkdyk
fuente
1

sedes la herramienta correcta; pero, como alternativa, incluso puede usar excomandos en vim:

vim -c 'args <files> | argdo %s/cat/dog/g | x'

donde <files>está la lista de archivos o patrones en los que desea realizar la sustitución.

jcollado
fuente
note que argdo no es POSIX pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html
Steven Penny
0

Puede usar Vim en modo Ex:

for b in *.txt
do
  ex -sc '%s/OLD/NEW/g|x' "$b"
done
  1. % seleccione todas las líneas

  2. s sustituir

  3. g reemplazar todas las instancias en cada línea

  4. x guardar y cerrar

Steven Penny
fuente