it-swarm.com.de

Wie finde ich in dieser zcat-Schleife nur ein bestimmtes Schlüsselwort?

Dies ist, was ich eingegeben habe und ich sollte nur das Protokoll des Benutzers in der "". Aber ich habe die ganzen Protokolle auf dem Server:

for i in `ls *.log.gz`; do zcat $i |  grep "U2779897722719715411" >> sara.log;  done ; *

Was soll ich in dieser Schleife ändern, um nur Log mit diesem Schlüsselwort zu finden?

Vielen Dank.

4
Sara Bar

Der Befehl zgrep ist sehr nützlich, um komprimierte Dateien zu durchsuchen, und Sie müssen zcat nicht an grep weiterleiten. Sie müssen die for-Schleife auch nicht verwenden, um eine Liste von Dateien mit globbing (Shell-Pattern-Matching) zu erstellen.

zgrep U2779897722719715411 *.log.gz >> sara.log

Dieser Befehl gibt den Dateinamen und die Zeile mit U2779897722719715411 aus, die durch ein : Zeichen.

Wenn Sie das Dateinamen-Präfix nicht möchten, können Sie das -h Option zu zgrep:

zgrep -h U2779897722719715411 *.log.gz >> sara.log

Dies kann auch mit einer Schleife erreicht werden. Vermeiden Sie jedoch die Verwendung von ls und führen Sie die Umleitung in die 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 verwenden möchten, die diese Benutzerzeichenfolge enthalten, können Sie -l Option auf 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
9
Arronical