Je voudrais suivre un fichier, mais uniquement les lignes de sortie qui contiennent une certaine chaîne. Est-ce possible?
Je voudrais suivre un fichier, mais uniquement les lignes de sortie qui contiennent une certaine chaîne. Est-ce possible?
Réponses:
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 |).
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:
tail -f /var/log/messages | awk '/myfilterword/'
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:
tail -f /var/log/messages | \
awk '/myfilterword/ { for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n")}'
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:
tail -f /var/log/messages | perl -ne "/myfilterword/ and print"
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:
tail -f /var/log/messages | \
perl -lane "/myfilterword/ and printf \"%6d %s\n\",++\$a,\$F[6]"
É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.
Une autre astuce à noter, si vous avez un fichier CSV avec des en-têtes que vous souhaitez omettre, par exemple:
% cat data.txt
fruit dessert calories
Apple Pie 770
Banana Pudding 625
Cherry Cobbler 990
% tail -n +2 data.txt
Apple Pie 770
Banana Pudding 625
Cherry Cobbler 990
Peu importe la longueur de l'entrée tail
, le +n -2
omettra la première ligne.
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.)