поиск нескольких файлов на основе содержащейся в них строки

поиск нескольких файлов на основе содержащейся в них строки

допустим у меня есть один текстовый файл содержащий электронные письма

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

Мне нужен небольшой скрипт bash для grep, find, чтобы найти содержащиеся в файлах адреса электронной почты и распечатать файлы, которые им соответствуют.

ожидать, что это будет

**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**

решение1

Если вы знаете список файлов, в которых следует искать адреса электронной почты, вы можете

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

Флаг '-w' будетуменьшатьно не устраняет некоторые ложные срабатывания, на которые Эд указывает в комментариях. Флаг '-o' необходим для печатитолькоадрес электронной почты, а не всю строку, содержащую его.

решение2

grep -Fxf list_of_emails.txt files...

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

Замените ...в findкоманде список файлов и каталогов, а также, возможно, другие findпредикаты.

Это /dev/nullзаставляет grepвсегда добавлять к результату префикс имени файла, чего grep не делает при вызове с одним файлом. Это эмулирует опцию -HGNU grep, которая не является переносимой.

Связанный контент