GNU/Linux >> Tutoriales Linux >  >> Linux

Línea de comando:busque y reemplace en todos los nombres de archivo que coincidan con grep

¿Quiere decir buscar y reemplazar una cadena en todos los archivos que coincidan con grep?

perl -p -i -e 's/oldstring/newstring/g' `grep -ril searchpattern *`

Editar

Dado que esta parece ser una pregunta bastante popular, pensé en actualizar.

Hoy en día uso principalmente ack-grep ya que es más fácil de usar. Entonces el comando anterior sería:

perl -p -i -e 's/old/new/g' `ack -l searchpattern`

Para manejar los espacios en blanco en los nombres de los archivos, puede ejecutar:

ack --print0 -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

puedes hacer más con ack-grep . Digamos que desea restringir la búsqueda solo a archivos HTML:

ack --print0 --html -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

Y si el espacio en blanco no es un problema, es aún más corto:

perl -p -i -e 's/old/new/g' `ack -l --html searchpattern`
perl -p -i -e 's/old/new/g' `ack -f --html` # will match all html files

Esto parece ser lo que quieres, según el ejemplo que diste:

sed -i 's/foo/bar/g' *

No es recursivo (no descenderá a subdirectorios). Para una buena solución reemplazando archivos seleccionados a lo largo de un árbol, usaría find:

find . -name '*.html' -print -exec sed -i.bak 's/foo/bar/g' {} \;

El *.html es la expresión que deben coincidir los archivos, el .bak después del -i hace una copia del archivo original, con una extensión .bak (puede ser cualquier extensión que desee) y el g al final de la expresión sed le dice a sed que reemplace varias copias en una línea (en lugar de solo la primera). El -print to find es una conveniencia para mostrar qué archivos se están emparejando. Todo esto depende de las versiones exactas de estas herramientas en su sistema.


Linux
  1. Cómo eliminar archivos y directorios en Linux desde la línea de comandos

  2. Cómo dividir y combinar archivos desde la línea de comandos en Linux

  3. ¿Probar la búsqueda recursiva de Sed y reemplazarla antes de ejecutarla?

  4. ¿Usar el comando Grep y localizar?

  5. Cómo eliminar archivos y directorios en la línea de comandos de Linux [Tutorial para principiantes]

Cómo eliminar archivos y directorios usando la línea de comandos de Linux

Cómo realizar una búsqueda de patrones en archivos usando Grep

Cómo buscar archivos desde la línea de comandos de Linux

Encontrar los archivos y carpetas más grandes en la línea de comandos de Linux

Cómo realizar una búsqueda Grep en todos los archivos y en todos los directorios

Conceptos básicos de la línea de comandos de Linux:trabajar con archivos y directorios