Est-il possible de faire un tail -f
(ou similaire) sur un fichier et grep
il en même temps? Je ne me dérangerais pas d'autres commandes que de rechercher ce genre de comportement.
En utilisant =GNU tail
et GNU grep
, je suis capable de grep a tail -f
Utilisation de la syntaxe directe:
tail -f /var/log/file.log | grep search_term
Ajouter --line-buffered
à grep
, et cela peut réduire le retard pour vous. Très utile dans certains cas.
tail -f foo | grep --line-buffered bar
Cela fonctionnera bien; Plus généralement, grep
_ _ va attendre lorsqu'un programme n'est pas émettant et continue à lire car la sortie est disponible, donc si vous le faites:
$ (echo foo; sleep 5; echo test; sleep 5) | grep test
Rien ne se passera pendant 5 secondes, puis Grep émettra le "test" correspondant, puis cinq secondes plus tard, il quittera la sortie du processus de canalisation.
Vous pouvez simplement tuyer la sortie de grep
dans tail -f
. Il existe également des programmes combinant tail -f
Fonctionnalité avec filtrage et colorant, en particulier multiditail ( exemples ).
Je vois toutes ces personnes qui disent à utiliser tail -f
, mais je n'aime pas les limites de cela! Ma méthode préférée de rechercher un fichier tout en regardant de nouvelles lignes (par exemple, je travaille couramment avec les fichiers journaux auxquels sont ajoutés la sortie redirigée des processus exécutés périodiquement via des travaux cron) est:
tail -Fn+0 /path/to/file|grep searchterm
Cela suppose GNU Tail and Grep. Soutenir les détails de la queue (GNU Coreutils, la mine est V8.22) [ https://www.gnu.org/software/ CARUTILS/Manual/CARUTILILS.HTML] :
-F same as --follow=name --retry -n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output starting with the Kth. If the first character of K (the number of bytes or lines) is a '+', print beginning with the Kth item from the start of each file, otherwise, print the last K items in the file. K may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
Donc, la partie queue de ma commande équivaut à tail --follow --retry --lines=+0
, où l'argument final le dirige pour commencer au début, sautant zéro lignes.
tail -f access | awk '/ADD/{print $0}'
Utilisez ce qui précède, je l'utilise habituellement.
Vous pouvez utiliser NetCat vers Grep les résultats de la queue -f, car de nouveaux résultats sont assez facilement.
Sudo nc -s localhost -l -p 1337 | grep ssh
tail -f /var/log/file.log | nc 127.0.0.1 1337
Cela définit Grep pour écouter des résultats pour les entrées provenant du port 1337.
La deuxième commande conduite la sortie de la queue -f à NetCat et l'envoie localhost 1337. Pour le faire localement, vous devez basculer des tyranes pour chacun des deux séries de commandes ou utilisez quelque chose comme l'écran.