
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 find
Befehl durch eine Liste von Dateien und Verzeichnissen und möglicherweise anderen find
Prädikaten.
Damit /dev/null
wird erzwungen, grep
dass dem Ergebnis immer der Dateiname vorangestellt wird, was grep nicht tut, wenn es mit einer einzelnen Datei aufgerufen wird. Dies emuliert die -H
Option von GNU grep, das nicht portierbar ist.