Combina tail -f con grep?


26

Ciao, voglio continuare a guardare un file di registro, ma anche non voglio vedere cose irrilevanti, sono interessato solo a qualcosa con "foobar" in esso.

Quindi, se stessi eseguendo la coda del file, lo farei

 tail file | grep "foobar"

Ora che sto aggiungendo l'opzione -f, c'è un modo per mostrare in qualche modo solo le cose che voglio? usando grep o altra tecnica?


1
Sembra che la tua risposta è già scritto qui: stackoverflow.com/questions/5427483/...
uSlackr

1
Sembra che la risposta di Xyr sia nella domanda.
JdeBP,

Risposte:


41

Hai quasi scritto la risposta, che è:

tail -f file.log | grep "foobar"

Questo è tutto.


1
Woah, hai ragione, penso che non mi aspettassi che funzionasse, non lo faccio ancora, non si suppone che le tubazioni avvengano quando un comando ha terminato l'esecuzione? Immagino che questo dimostra che non lo è, succede ogni volta che c'è un output, giusto?
user893730

3
No, avvierà i due programmi in parallelo e il secondo (grep) uscirà non appena si chiuderà lo STDOUT della coda. Questo è il punto centrale delle pipe, dello streaming di dati :)
Ravachol,

4
Quando grepè l'ultima riga nella pipe, il suo output è bufferizzato, quindi vedi l'output filtrato di tail -flive, piuttosto che ritardato. Si noti che se si dovessero usare più grepcomandi, chiunque avesse l'output di piping avrebbe bisogno di --line-bufferedun'opzione (assumendo GNU o BSD grep) per mantenere questo comportamento.
ghoti,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.