Questo è ciò che ho digitato e dovevo ottenere solo il registro dell'utente nel ""
. Ma ho tutti i log nel server:
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
Cosa devo cambiare in questo ciclo per trovare solo log con questa parola chiave?
Grazie.
Risposta accettata:
Il zgrep
Il comando è molto utile per eseguire il grepping di file compressi ed evita la necessità di reindirizzare zcat
a grep
. Inoltre, non è necessario utilizzare il ciclo for per creare un elenco di file mediante globbing (corrispondenza del modello di shell).
zgrep U2779897722719715411 *.log.gz >> sara.log
Quel comando genererà il nome del file e la riga contenente U27798977722719715411 separati da un :
carattere.
Se non vuoi il prefisso del nome del file, puoi usare il -h
opzione per zgrep
:
zgrep -h U2779897722719715411 *.log.gz >> sara.log
Questo può essere ottenuto anche con un ciclo, ma evita di usare ls
, ed eseguire il reindirizzamento al file al termine del ciclo:
for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
In alternativa, se vuoi solo il nome del file dei file che contengono quella stringa utente U27798977722719715411, puoi usare il -l
opzione per zgrep
in uno dei comandi precedenti:
zgrep -l U2779897722719715411 *.log.gz >> sara.log
o
for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log