Bien que je ne pense pas que pierr ait eu cette préoccupation, j'avais besoin d'une solution qui ne retarderait pas la sortie de la "queue" en direct d'un fichier, car je voulais surveiller plusieurs journaux d'alertes simultanément, en préfixant chaque ligne avec le nom de son journal respectif. .
Malheureusement, sed, cut, etc. ont introduit trop de tampons et m'ont empêché de voir les lignes les plus récentes. La suggestion de Steven Penny d'utiliser l' -s
option denl
était intrigante, et les tests ont prouvé qu'elle n'introduisait pas la mise en mémoire tampon indésirable qui me concernait.
Il y avait quelques problèmes avec l'utilisation nl
liés au désir de supprimer les numéros de ligne indésirables (même si vous ne vous souciez pas de l'esthétique, il peut y avoir des cas où l'utilisation des colonnes supplémentaires ne serait pas souhaitable). Tout d'abord, l'utilisation de «couper» pour supprimer les chiffres réintroduit le problème de mise en mémoire tampon, ce qui détruit la solution. Deuxièmement, l'utilisation de "-w1" n'aide pas, car cela ne restreint PAS le numéro de ligne à une seule colonne - il devient juste plus large car plus de chiffres sont nécessaires.
Ce n'est pas joli si vous voulez capturer cela ailleurs, mais comme c'est exactement ce que je n'avais pas besoin de faire (tout était déjà écrit dans des fichiers journaux, je voulais juste en regarder plusieurs à la fois en temps réel), le meilleur moyen de perdre les numéros de ligne et de n'avoir que mon préfixe était de commencer la -s
chaîne par un retour chariot (CR ou ^ M ou Ctrl-M). Ainsi, par exemple:
#!/bin/ksh
# Monitor the widget, framas, and dweezil
# log files until the operator hits <enter>
# to end monitoring.
PGRP=$$
for LOGFILE in widget framas dweezil
do
(
tail -f $LOGFILE 2>&1 |
nl -s"^M${LOGFILE}> "
) &
sleep 1
done
read KILLEM
kill -- -${PGRP}
sed
pour les tâches légères comme celle-ci. Si "préfixe" est connu, il est très facile de choisir un caractère qui ne fait pas partie de "préfixe".