Schwanz mehrere Dateien und grep die Ausgabe
Ich würde gerne grep ein Muster aus mehreren log-Dateien, die ständig aktualisiert und erweitert durch einige Prozesse und tail die Ausgabe des grep kontinuierlich.
Unter Befehl funktioniert nicht und ich bekomme
- tail: Warnung: die folgenden standard-input auf unbestimmte Zeit unwirksam ist
tail -f | grep --line-buffered "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log
Kann jemand helfen, Sortieren Sie diese aus?
- Duplikat von superuser.com/questions/59471/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie einen Blick auf
multitail
tool (Installieren mitsudo apt-get install multitail
)Kurz, mit multitail, müssen Sie die
--mergeall
flag für die Anzeige-Ausgabe von all in one PlatzKönnen Sie das gleiche tun, ohne mit grep
Um die Ausgabe individuell mit multitail, dies gibt den Dateinamen als auch.
den Fehler ist, dass Sie die Dateien auf den grep-Befehl und nicht der Schwanz.
den tail-f braucht, um die Dateien als Eingabe. versuchen:
erhalten auch die Dateinamen (aber es wird nicht, wie grep output ist es):
Dies ist eine interessante Frage und die Antwort sollte sein: die Verwendung der Präfix-Schalter mit Schwanz, aber leider ist dies momentan noch nicht implementiert in den meisten Versionen von
tail
.Wie ich es sehe, haben Sie zwei Möglichkeiten: Anpassung der standard-tools, um die Aufgabe (siehe Udys beantworten) oder schreiben Sie Ihre eigenen Tools mit Ihrem Lieblings-scripting/Programmiersprache.
Unten ist eine Möglichkeit, Sie könnte es mit der
File::Tail::Multi
Modul fürperl
. Beachten Sie, dass müssen Sie möglicherweise installieren Sie das Modul aus dem CPAN (cpan -i File::Tail::Multi
).Speichern Sie das folgende Skript z.B.
mtail
um den Pfad für ausführbare Dateien, und machen Sie das Skript ausführbar.Ändern
OutputPrefix
zu'p'
wenn Sie lieber die vollständige Pfad-Präfixe.Führen Sie es wie folgt:
Müssen Sie nicht angeben
--line-buffered
wenngrep
ist der Letzte Befehl, so ist dies ausreichend: