Das Tool heißt remark und es färbt jeden Text anhand Regulärer Ausdrücke ein. Wie das geht illustrieren gleich ein paar Beispiele, es gibt jedenfalls kaum Grenzen: Alles, was sich in eine Regel auf der Grundlage eines Textmusters fassen lässt, taugt, um dem Text einen bunten Anstrich zu verleihen.
Zuerst aber muss man das Tool selber installieren. Zum Ubuntu-Repository gehört es leider schon mal nicht, aber mit
$ wget http://savannah.nongnu.org/download/regex-markup/regex-markup_0.10.0-1_amd64.deb
besorgt man sich ein Debian-Paket. Wenn das nicht passt, ist auch ein RPM-Paket oder der Quelltext zum Kompilieren erhältlich:
$ wget http://savannah.nongnu.org/download/regex-markup/regex-markup-0.10.0.tar.gz
Aufgerufen wird das Kommando prinzipiell mit
Kommando [arg1, arg2, ...] | remark Pfad/zum/Regelsatz
Hinter Regelsatz verbirgt sich ein Konfigurationsfile, dass die Regulären Ausdrücke enthält, die bestimmen, was wie eingefärbt werden soll. Im einfachsten Fall sähe das etwa so aus:
include "common" /WARNING/ red
Das inkludierte "common" enthält ein paar Definitionen für Special Character Sequences zur Farbwahl in ANSI-Terminals wie
style red { pre "\E[31m" post "\E[39m" }
Damit kann man zusammen mit den regulären Ausdrücken bequem Farbnamen statt der kryptischen Befehlsfolgen verwenden.
Nun wird schon das Wort "Warning" rot hervorgehoben. Das muss aber nicht alles sein. Nehmen wir an, wir wollten im Syslog den Zeitstempel zusätzlich grün absetzen. Dann ergänzen wir:
/^[A-Za-z]{3}\s[0-9]{2}\s([0-9]{2}:)+[0-9]{2}/ green
(Seltsamerweise funktionierte hier \d nicht, so dass man etwas umständlicher [0-9] schreiben muss.)
Noch feiner kann man die Farben abstufen, wenn man Reguläre Ausdrücke mit Subausrücken konstruiert, denen man dann jeweils verschiedene Farben zuweist. Beispielsweise könnte man den Zeitstempel grün, Host- und Kommandonamen bis zum ersten Doppelpunkt in der Syslogzeile blau und den Rest gelb erscheinen lassen, während "Warning" weiter rot hervorgehoben wird. Dafür ändert man den zweiten Regulären Ausruck in:
/(^[A-Za-z]{3}\s[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2})(\s.*?:)(.*$)/ { default 1 green 2 blue 3 yellow break }
Auf alles wird der Default-Style angewendet, es sei denn, der Reguläre Ausdruck greift. Dessen durchnummerierten Subausdrücken in den runden Klammern entsprechen die aufgeführten Farben. Das break sorgt dafür, dass die RegEx-Auswertung abgebrochen wird, wenn die vorstehenden Bedingungen erfüllt sind. Das ist etwas performanter.
Kolorieren kann man nicht nur Texte wie in Logfiles, sondern auch die Ausgaben von Kommandos wie ping, lsof oder netstat. Dafür lässt sich die Pipe mit dem remark-Befehl am besten in einem Shell-Alias speichern. Da ein Regelsatz beliebig viele Reguläre Ausdrücke jeweils mit Subausdrücken enthalten kann und jedem Subausdruck eine andere Farbe oder ein anderer Schriftschnitt (wie bold) zuordenbar ist, geht mit entsprechendem Fleiß praktisch alles. Nur: Wenn jedes dritte Zeichen eine andere Farbe hat, ist alles auch wieder so unübersichtlich wie in der Bleiwüste.
Re: Geht auch mit ccze
Montag, 05. November 2012 09:17:50