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

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

電子メールを含むテキストファイルがあるとしましょう。

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

grepの小さな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述語に置き換えます。

これは、単一ファイルとして呼び出されたときにgrepが実行しない結果に常にファイル名プレフィックスを追加するように/dev/null強制するためです。grepこれは-H移植性のないGNU grepのオプションをエミュレートします。

関連情報