Obwohl ich nicht glaube, dass pierr dieses Problem hatte, brauchte ich eine Lösung, die die Ausgabe vom Live- "Tail" einer Datei nicht verzögert, da ich mehrere Warnprotokolle gleichzeitig überwachen und jeder Zeile den Namen des jeweiligen Protokolls voranstellen wollte .
Leider haben sed, cut usw. zu viel Pufferung eingeführt und mich davon abgehalten, die aktuellsten Zeilen zu sehen. Steven Pennys Vorschlag, die -s
Option von zu verwenden, nl
war faszinierend, und Tests haben gezeigt, dass die unerwünschte Pufferung, die mich beschäftigte, nicht eingeführt wurde.
Es gab jedoch einige Probleme bei der Verwendung nl
, die mit dem Wunsch zusammenhängen, die unerwünschten Zeilennummern zu entfernen (selbst wenn Sie sich nicht für die Ästhetik interessieren, kann es Fälle geben, in denen die Verwendung der zusätzlichen Spalten unerwünscht wäre). Erstens führt die Verwendung von "Ausschneiden" zum Entfernen der Zahlen das Pufferproblem erneut ein, sodass die Lösung zerstört wird. Zweitens hilft die Verwendung von "-w1" nicht, da dies die Zeilennummer NICHT auf eine einzelne Spalte beschränkt - sie wird nur breiter, wenn mehr Ziffern benötigt werden.
Es ist nicht schön, wenn Sie dies an anderer Stelle erfassen möchten, aber da ich genau das nicht tun musste (alles wurde bereits in Protokolldateien geschrieben, ich wollte nur mehrere gleichzeitig in Echtzeit ansehen), das Beste Um die Zeilennummern zu verlieren und nur mein Präfix zu haben, begann der -s
String mit einem Wagenrücklauf (CR oder ^ M oder Strg-M). Also zum Beispiel:
#!/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
leichte Aufgaben wie diese. Wenn "Präfix" bekannt ist, ist es sehr einfach, ein Zeichen auszuwählen, das nicht aus "Präfix" stammt.