Je veux exécuter une commande dès qu'un certain texte apparaît dans un fichier journal. Comment est-ce que je fais ça dans Bash?Comment faire quelque chose avec Bash lorsqu'une ligne de texte apparaît dans un fichier
Répondre
Utilisez la commande
tail -f file.log | grep --line-buffered "my pattern" | while read line
do
echo $line
done
Le --line-buffered
est la clé ici, sinon la lecture échouera.
Cela devrait fonctionner même sans GNU grep:
tail -f -n 0 logfile.out | nawk '/pattern/ {system("echo do something here")}'
modifier: Ajout "-n 0" de sorte que seuls les nouveaux occurences du texte seront jumelés.
En utilisant seulement tail
:
tail -f file.log | while read line; do if [[ $line == *text* ]]; then
mycommand
fi; done
J'aime la réponse de Matli. La réponse de Bruno De Fraine est également bonne car elle n'utilise que des ccommands de shell, pas d'autres programmes (comme awk). Il souffre du problème que toute la ligne doit correspondre à la chaîne magique. Ce n'est pas clair à partir de la question qui fait partie de la demande.
Je modifierais un tout petit peu pour faire face à la « dès que » clause de la question initiale
logfile_generator | tee logfile.out | nawk '/pattern/ {system("echo do something here")}'
où logfile_generator est le programme qui génère le fichier journal en premier lieu. Cette modification exécute le "quelque chose" dès que la chaîne magique est localisée.
Vous pouvez également regarder inotail
, un remplacement pour tail -f
qui utilise le cadre inotify
pour se réveiller uniquement lorsque le fichier qui vous intéresse a changé. L'habituel tail -f
dort juste pendant de courtes périodes de temps entre les sondages, ce qui est une solution efficace mais pas très efficace.
- 1. OCMock: Faire un bout faire quelque chose
- 2. Comment faire quelque chose à tous les fichiers dans un répertoire en utilisant bash?
- 3. Comment faire quelque chose quand il est disponible avec jQuery?
- 4. comment faire correspondre quelque chose avec RegExp entre roundbrackets
- 5. Comment faire quelque chose comme ça dans Scala?
- 6. faire quelque chose si vue des charges
- 7. Comment emballer un int [,] avec quelque chose comme une ReadOnlyCollection?
- 8. Comment faire quelque chose pour AJAX contenu chargé d'une thickbox?
- 9. Comment faire valoir quelque chose à la compilation en Java?
- 10. Comment associer deux lignes d'un fichier texte avec Bash?
- 11. quelque chose de mal avec xml
- 12. Comment glisser et déposer quelque chose dans un contrôle statique?
- 13. Comment faire une superposition d'image en HTML (quelque chose comme un marqueur sur Google Map)?
- 14. Changement de ligne dans un fichier
- 15. Comment faire un astérisque avec le texte environnant dans WPF?
- 16. C# menu tooltrip & quelque chose de plus
- 17. comment puis-je faire cela avec jquery? (Ses quelque chose créé avec flash)
- 18. Comment puis-je remplacer une ligne spécifique par un numéro de ligne dans un fichier texte?
- 19. Essayer de sélectionner quelque chose dans le texte avec une regex
- 20. l'analyse d'une ligne dans bash
- 21. Effacer un bogue de type lors de l'animation de quelque chose avec un fond transparent
- 22. ligne de code bash à partir du fichier .configure
- 23. Je cherche quelque chose de similaire à AdRotator dans .NET
- 24. Comment faire de cette ligne de commande python un alias dans bash?
- 25. comment faire saut de ligne de texte dans textarea flex
- 26. est-il un moyen de base pour supprimer quelque chose du fichier ouvert
- 27. extraction 2 fois par ligne dans un fichier texte
- 28. Comment vérifier dans un script bash si quelque chose est en cours d'exécution et quitter s'il est
- 29. Comment insérer un nouveau caractère de ligne après un nombre fixe de caractères dans un fichier
- 30. Lire quelque chose après un mot en C++
Ma solution correspond à n'importe quelle ligne qui contient du "texte" (c'est ce que fait le modèle * texte *), et pas seulement des lignes égales à "texte". Voir la description du composé [[]] et == dans le manuel de Bash. –