GNU/Linux >> Tutoriels Linux >  >> Linux

Comment "grep" un flux continu ?

Je pense que votre problème est que grep utilise une mémoire tampon de sortie. Essayez

tail -f file | stdbuf -o0 grep my_pattern

il définira le mode de mise en mémoire tampon de sortie de grep sur non tamponné.


Activer grep Mode de mise en mémoire tampon de ligne lors de l'utilisation de grep BSD (FreeBSD, Mac OS X, etc.)

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

Il semble qu'il y a quelque temps --line-buffered n'avait pas d'importance pour GNU grep (utilisé sur à peu près n'importe quel Linux) car il était vidé par défaut (YMMV pour d'autres Unix comme SmartOS, AIX ou QNX). Cependant, depuis novembre 2020, --line-buffered est nécessaire (au moins avec GNU grep 3.5 dans openSUSE, mais cela semble généralement nécessaire d'après les commentaires ci-dessous).


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

Il attendra que grep se vide, pas jusqu'à ce qu'il se termine (j'utilise Ubuntu).


Si vous voulez trouver des correspondances dans l'intégralité fichier (pas seulement la queue), et vous voulez qu'il reste assis et attende de nouvelles correspondances, cela fonctionne bien :

tail -c +0 -f <file> | grep --line-buffered <pattern>

Le -c +0 flag indique que la sortie doit commencer 0 octets (-c ) depuis le début (+ ) du fichier.


Linux
  1. Grep Comment supprimer l'affichage d'un fichier non correspondant ?

  2. Comment puis-je rechercher un motif multiligne dans un fichier ?

  3. Comment puis-je grep récursivement?

  4. Comment grep \n dans le fichier

  5. Comment récupérer un fichier supprimé sous Linux ?

Comment créer un fichier sous Linux

Comment créer un fichier Tar Gz

Comment décompresser (ouvrir) le fichier Gz

Comment trouver une chaîne dans un fichier sous Linux

Comment créer un lien symbolique vers un fichier sous Linux

Comment migrer CentOS 8 vers le flux CentOS