Wie wäre es damit, was ich teilweise dank dieses Beitrags erreichen konnte?
Sie möchten mehrere Dateien finden, beispielsweise Protokolle mit unterschiedlichen Namen, aber einem Muster (z. B. filename=logfile.DATE), in mehreren Verzeichnissen mit einem Muster (z /logsapp1, /logsapp2. B. ). Jede Datei hat ein Muster, das Sie erfassen möchten (z. B. "init time"), und Sie möchten das Muster "init time"jeder Datei haben, aber wissen, zu welcher Datei sie gehört.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Dann outputfilename.txtwäre das so etwas wie
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
Allgemein
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Erläuterung:
find Der Befehl durchsucht die Dateinamen anhand des Musters
Dann xargs -I{}leitet Pipe die findAusgabe an die um{}
welches die Eingabe für sein wird grep ""pattern" {}
Dann der Trick, um grepdie Dateinamen anzuzeigen\dev\null
und schließlich schreiben Sie die Ausgabe in Datei mit tee outputfile.txt
Dies funktionierte für mich in grepVersion 9.0.5 Build 1989.
grep --version