Je voudrais suivre un fichier, mais uniquement les lignes de sortie qui contiennent une certaine chaîne. Est-ce possible?
11
utilisez grep. Son construit juste à cet effet.
Pour trouver des lignes d'une queue de / var / log / syslog qui contiennent "cron", lancez simplement:
tail -f /var/log/syslog | grep cron
Et comme il accepte tout sur stdin, vous pouvez également l'utiliser sur la sortie de toute autre commande, en canalisant de la même manière que ci-dessus (en utilisant le symbole |).
grep
cela tamponnera lorsqu'il sera utilisé de manière non interactive, comme lorsqu'il fait partie d'un pipeline plus long. GNU grep 2.5.1 offre la--line-buffered
possibilité de contourner ce problème lorsque l'élimination de grep du pipeline n'est pas une option. (Quand je dis que grep va tamponner, je veux dire que vous ne verrez pas la sortie tant que le tampon n'aura pas atteint quelque chose comme 4k.)J'espère que cela pourra aider.
la source
Voici quelques autres idées qui, bien que moins simples, peuvent offrir une flexibilité supplémentaire intéressante:
Tout d'abord, vous pouvez filtrer avec awk au lieu de grep:
cela fonctionne exactement de la même manière que l'exemple utilisant
grep
. Vous pouvez développer cela en utilisant la puissance de awk, par exemple:qui affichera le 6ème dans le dernier champ de la sortie (les champs sont séparés par des espaces)
Une autre idée similaire consiste à utiliser un perl one-liner:
qui fonctionne exactement comme
grep
. Peut-être que vous voulez un compteur de numéros de ligne et juste le 6ème champ? Que dis-tu de ça:Évidemment, toutes ces sortes de choses peuvent aussi être faites avec d'autres outils, mais je voulais illustrer qu'il existe des façons amusantes d'utiliser des langages plus généraux comme awk ou perl ici.
la source
Une autre astuce à noter, si vous avez un fichier CSV avec des en-têtes que vous souhaitez omettre, par exemple:
Peu importe la longueur de l'entrée
tail
, le+n -2
omettra la première ligne.la source