文字列を含むファイルに基づいて複数のファイルを検索する

文字列を含むファイルに基づいて複数のファイルを検索する

メールを含むテキストファイルが1つあるとします

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

ファイルにメールが含まれているかどうかを検索し、それに一致するファイルを出力するための、grep と find 用の小さな bash スクリプトが必要です。

それが期待される

**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'フラグは減らすしかし、Edがコメントで指摘している誤検知の一部は排除できません。「-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 が単一のファイルで呼び出されたときには実行されません。これは、移植性のない GNU grep のオプションをエミュレートします。grep-H

関連情報