Risposte:
Non so come usare awk invece di grep, ma questo funziona per me:
tail -f file.log | grep -Ev '(ELB|Pingdom|Health)'
EDIT: Come dmourati e Caleb ha sottolineato, si potrebbe anche usare egrep
al posto di grep -E
per convenienza. Su alcuni sistemi questo sarà un collegamento allo stesso binario, in altri una copia fornita dal pacchetto grep. Ad ogni modo, vive in alternativa allo -E
switch. Tuttavia, secondo la pagina man di GNU grep:
[…] Due programmi varianti
egrep
efgrep
sono disponibili.egrep
è lo stesso digrep -E
.fgrep
è lo stesso digrep -F
. L'invocazione diretta come unaegrep
ofgrep
è deprecata, ma viene fornita per consentire l'esecuzione senza modifiche delle applicazioni storiche che fanno affidamento su di esse.
Dal momento che sono anche comandi, si riduce alle preferenze a meno che tu non abbia egrep affatto. Tuttavia, per la compatibilità futura, si consiglia di utilizzare la grep -E
sintassi poiché l'altro metodo è ufficialmente deprecato.
grep -E
invece di egrep
giustificare una risposta duplicata?
sed
, awk
, perl
, multitail
o ninja_foo
.
Prova a convogliarlo per egrep con un elenco di parole separato da una pipa che vuoi filtrare:
tail -f log_file | egrep -v 'ELB|Pingdom|Health'
Si noti che l'uso delle parentesi nell'elenco delle corrispondenze è facoltativo. Dal momento che il|
grep viene trattato come un operatore logico OR da grep, indipendentemente dal fatto che si verifichi o meno come parte di un sottogruppo. '(ELB|Pingdom|Health)'
funzionerebbe esattamente allo stesso modo. Per alcuni, la sintassi può essere più ovvia; Trovo più facile digitare senza, poiché posso passare da una singola corrispondenza a un elenco di possibili corrispondenze senza tornare indietro per aggiungere la parentesi.
Per ulteriore credito, vale la pena ricordare che multitail
fa ninja foo quando si tratta di filtrare l'output. Ad esempio puoi filtrare le tue parole in questo modo:
multitail -e ELB -e Pingdom -e Health -f log_file
Puoi anche usarlo per colorare o altrimenti evidenziare l'output invece di filtrarlo.
MODIFICA: vedere la risposta di DTest e i commenti per la spiegazione completa di come egrep sia solo un modo alternativo deprecato di sparare grep -E
.
Perché vuoi registrare queste informazioni?
Se si desidera avere un comportamento basato su script in base al contenuto dei file di registro, è possibile che si desideri effettuare il filtro utilizzando Expect. ( http://en.wikipedia.org/wiki/Expect ) Expect è un'estensione Tcl ma esiste anche una versione Python di Expect.
Expect ti offre questo potente interruttore flessibile come un'istruzione che ti consente di specificare condizionalmente diversi comportamenti a seconda degli stati o dei modelli presenti nel tuo flusso di input. Per esempio:
expect {
"password:" {
send "password\r"
}
"yes/no)?" {
send "yes\r"
set timeout -1
}
timeout {
exit
}
-re . {
exp_continue
}
eof {
exit
}
}
Quindi specifichi i pattern nell'attesa di attesa e specifichi comportamenti diversi, e puoi avvolgere tutto in un ciclo, e puoi facilmente scrivere filtri molto potenti che scrivono anche parti del tuo input in file diversi, o rilasciarlo del tutto, oppure intraprendi delle azioni ed esegui altri script in base a ciò che è inserito.
Quindi, si riduce al motivo per cui stai cercando di filtrare i tuoi file di registro, di agire sull'input del registro o solo per motivi di archiviazione?