buscar varios archivos según el archivo que contiene una cadena

buscar varios archivos según el archivo que contiene una cadena

digamos que tengo un archivo de texto que contiene correos electrónicos

abd3@dom
abd2@dom
sdklf2@lksd
sd@gm

Necesito un pequeño script bash para grep, find, para buscar, contener el correo electrónico en archivos e imprimir los archivos que coincidan.

la espera que sea

**this email abd3@dom found in file8560.txt**
**this email abd2@dom found in file750.txt**
**this email sdklf2@lksd found in file970.txt**
**this email sd@gm found in file2690.txt**

Respuesta1

Si conoce la lista de archivos para buscar direcciones de correo electrónico, puede

grep -F -H -w -o -f email_list_file list of files to search | awk -F: '{print "*** this email " $2 " found in " $1 "**}'

La bandera '-w'reducirpero no eliminar algunos de los falsos positivos que Ed señala en los comentarios. La bandera '-o' es necesaria para imprimirsolola dirección de correo electrónico, no la línea completa que la contiene.

Respuesta2

grep -Fxf list_of_emails.txt files...

find ... -type f -exec grep -Fxf list_of_emails.txt /dev/null {} +

Reemplace el ...en el findcomando con una lista de archivos y directorios, y tal vez otros findpredicados.

La /dev/nullidea es forzar grepque siempre se prefije el resultado con el nombre del archivo, lo que grep no hace cuando se llama con un solo archivo. Esto emula la -Hopción de GNU grep, que no es portátil.

información relacionada