¿Hay alguna forma de ejecutar una búsqueda recursiva de prueba y reemplazar usando sed, antes de ejecutarla? Solo quiero imprimir los resultados antes de hacer la búsqueda y reemplazar. Algo así como hacer eco de los resultados de,
grep -rl term1 . |xargs sed -i -e 's/term1/term2/'

Respuestas:
Puede ejecutar
sedsin-iy pasar por la salida conlessLuego, ejecute
sedcon-i.bakpara crear copias de seguridad que puede diferir despuésEditar: como se sugiere en el comentario, use
grep --null | xargs -0. Esto hace que los nombres de archivo sean terminados por el byte nulo, lo que lo hace seguro para nombres de archivo con caracteres inusuales como nueva línea. Sí,\nes un carácter válido en un nombre de archivo unix. Los únicos caracteres prohibidos son la barra/y el carácter nulo.\0fuente
grep -rl --nullya que OP no especificó OS y-Zsignifica algo diferente en BSD / OSX (descomprimir).--nulles lo mismo en GNU y BSDgrepes (una bifurcación de) el grep de GNU en FreeBSD y NetBSD. En NetBSD,-Ztodavía significa--null(según la página de manual), pero estoy de acuerdo: nulo es más portátil. También tenga en cuenta que ni --null ni -Z trabajan en OpenBSDsed -i '' -e s/.../en BSDsed(no hay opciones opcionales allí)Usar
sedcon enfindlugar degrepEn primer lugar, emplearía en
findlugar degrep, y esto por tres buenas razones:findpermite una selección de archivos más precisa. Por ejemplo, sologrep -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.-readabley-writabledefindevitará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:o más específicamente:
Carrera en seco
Ahora, proceda con una
sedcarrera en seco. Lasedopción-nes sinónimo de--quietypal final de lasedexpresión imprimirá el espacio de patrón actual.o más específicamente:
Ejecución
Si todo se ve bien, emita el comando definitivo reemplazando la
sedopción-npor-i"en su lugar" y quitando elpal final.o más específicamente:
Más
findejemplosMás
findejemplos se pueden encontrar aquí .fuente