Das habe ich eingegeben und es wurde erwartet, dass ich nur das Protokoll des Benutzers im ""
bekomme . Aber ich habe die ganzen Protokolle auf dem Server:
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
Was muss ich in dieser Schleife ändern, um nur Protokolle mit diesem Schlüsselwort zu finden?
Danke.
Akzeptierte Antwort:
Das zgrep
Der Befehl ist sehr nützlich, um komprimierte Dateien einzufügen, und vermeidet die Notwendigkeit, zcat
zu pipen zu grep
. Sie müssen auch nicht die for-Schleife verwenden, um eine Liste von Dateien durch Globbing (Shell-Musterabgleich) zu erstellen.
zgrep U2779897722719715411 *.log.gz >> sara.log
Dieser Befehl gibt den Dateinamen und die Zeile mit U2779897722719715411 getrennt durch einen :
aus Zeichen.
Wenn Sie das Dateinamenpräfix nicht möchten, können Sie das -h
verwenden Option zu zgrep
:
zgrep -h U2779897722719715411 *.log.gz >> sara.log
Dies kann auch mit einer Schleife erreicht werden, aber vermeiden Sie die Verwendung von ls
, und führen Sie die Umleitung zu der Datei aus, nachdem die Schleife abgeschlossen ist:
for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
Wenn Sie alternativ nur den Dateinamen von Dateien wünschen, die diese Benutzerzeichenfolge U2779897722719715411 enthalten, können Sie den -l
verwenden Option zu zgrep
in einem der obigen Befehle:
zgrep -l U2779897722719715411 *.log.gz >> sara.log
oder
for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log