808 votes

Comment «grep» un flux continu

Est-ce possible d'utiliser grep sur un flux continu.

Ce que je veux dire est une sorte de commande tail -f <file> , mais avec grep sur la sortie afin de ne garder que les lignes qui m'intéressent.

J'ai essayé tail -f <file> | grep pattern mais il semble que grep ne peut être exécuté qu'une fois que tail termine, c'est - à - dire jamais.

1450voto

tad Points 2566

Activer le mode de mise en mémoire tampon de ligne grep .

 tail -f file | grep --line-buffered my_pattern
 

125voto

Irit Katriel Points 1507

J'utilise le motif tail -f <file> | grep tout le temps.

Il attendra jusqu'à ce que la queue soit vide, pas avant qu'elle ne finisse (j'utilise Ubuntu).

77voto

XzKto Points 1299

Je pense que votre problème est que grep utilise un tampon de sortie. Essayer

 tail -f file | stdbuf -o0 grep my_pattern
 

il mettra le mode de tamponnage de sortie de grep à unbuffered.

2voto

Caleb Points 2021

Oui, cela fonctionnera très bien. Grep et la plupart des commandes Unix fonctionnent sur les flux une ligne à la fois. Chaque ligne qui sort de la queue sera analysée et transmise si elle correspond.

-4voto

Atif Points 6

Utilisez awk (un autre grand utilitaire bash) au lieu de grep où vous n'avez pas l'option de ligne tamponnée! Il va continuellement diffuser vos données depuis la queue.

c'est comme ça que vous utilisez grep

 tail -f <file> | grep pattern
 

C'est comme ça que vous utiliseriez awk

 tail -f <file> | awk '/pattern/{print $0}'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X