Suche in mehreren Dateien basierend auf der Datei, die eine Zeichenfolge enthält

Suche in mehreren Dateien basierend auf der Datei, die eine Zeichenfolge enthält

Nehmen wir an, ich habe eine Textdatei mit E-Mails

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

ich brauche ein kleines Bash-Skript für grep, find, um die in Dateien enthaltene E-Mail zu finden und die passenden Dateien auszudrucken.

die erwarten, dass es

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

Antwort1

Wenn Sie die Liste der Dateien kennen, in denen nach E-Mail-Adressen gesucht werden soll, können Sie

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

Die Flagge '-w' wirdreduzierenaber nicht einige der falschen Positivmeldungen beseitigen, auf die Ed in Kommentaren hinweist. Die '-o'-Flagge ist notwendig, um zu druckennurdie E-Mail-Adresse, nicht die gesamte Zeile, die sie enthält.

Antwort2

grep -Fxf list_of_emails.txt files...

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

Ersetzen Sie ...im findBefehl durch eine Liste von Dateien und Verzeichnissen und möglicherweise anderen findPrädikaten.

Damit /dev/nullwird erzwungen, grepdass dem Ergebnis immer der Dateiname vorangestellt wird, was grep nicht tut, wenn es mit einer einzelnen Datei aufgerufen wird. Dies emuliert die -HOption von GNU grep, das nicht portierbar ist.

verwandte Informationen