Usar sed
con en find
lugar degrep
En primer lugar, emplearía en find
lugar de grep
, y esto por tres buenas razones:
find
permite una selección de archivos más precisa. Por ejemplo, solo grep -r string *.txt
generará archivos en el directorio actual; no aquellos en subdirectorios.
find
viene con la poderosa -exec
opción que elimina la necesidad de toda la --null … |xargs 0
construcción.
- Las opciones
-readable
y -writable
de find
evitarán perder tiempo en archivos a los que no se puede acceder.
Prueba de captura
Dicho esto, grep
se presta para una primera prueba para ver qué se capturaría:
$ find . -exec grep term1 {} \;
o más específicamente:
$ find . -type f -name '*.txt' -readable -writable -exec grep term1 {} \;
Carrera en seco
Ahora, proceda con una sed
carrera en seco. La sed
opción -n
es sinónimo de --quiet
y p
al final de la sed
expresión imprimirá el espacio de patrón actual.
$ find . -exec sed -n 's/term1/term2/gp' {} \;
o más específicamente:
$ find . -type f -name '*.txt' -readable -writable -exec sed -n 's/term1/term2/gp' {} \;
Ejecución
Si todo se ve bien, emita el comando definitivo reemplazando la sed
opción -n
por -i
"en su lugar" y quitando el p
al final.
$ find . -exec sed -i 's/term1/term2/g' {} \;
o más específicamente:
$ find . -type f -name '*.txt' -readable -writable -exec sed -i 's/term1/term2/g' {} \;
Más find
ejemplos
Más find
ejemplos se pueden encontrar aquí .