Usar sedcon en findlugar degrep
En primer lugar, emplearía en findlugar de grep, y esto por tres buenas razones:
findpermite una selección de archivos más precisa. Por ejemplo, solo grep -r string *.txtgenerará archivos en el directorio actual; no aquellos en subdirectorios.
findviene con la poderosa -execopción que elimina la necesidad de toda la --null … |xargs 0construcción.
- Las opciones
-readabley -writablede findevitarán perder tiempo en archivos a los que no se puede acceder.
Prueba de captura
Dicho esto, grepse 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 sedcarrera en seco. La sedopción -nes sinónimo de --quiety pal final de la sedexpresió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 sedopción -npor -i"en su lugar" y quitando el pal 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 findejemplos
Más findejemplos se pueden encontrar aquí .