Es gibt eine Antwort in superuser.com:
your-command | grep -E --color 'pattern|$'
oder
your-command | grep --color 'pattern\|$'
Dies wird "Ihrem Muster oder dem Zeilenende in jeder Zeile entsprechen. Nur das Muster wird hervorgehoben..."
Sie könnten es versuchen (muss vielleicht etwas mehr Escapezeichen sein):
BLUE="$(tput setaf 4)"
BLACK="$(tput sgr0)"
command | sed "s/^ERROR /${BLUE}ERROR ${BLACK}/g"
Wenn Sie dies global aktivieren möchten, benötigen Sie eine Terminalfunktion und keinen Prozess, in den Sie die Ausgabe leiten, da eine Pipeline einige Befehle stören würde (zwei Probleme sind, dass stdout und stderr nicht in der richtigen Reihenfolge erscheinen und gepuffert, und dass sich einige Befehle bei der Ausgabe an ein Terminal einfach anders verhalten).
Mir ist kein „herkömmliches“ Endgerät mit dieser Funktion bekannt. Das geht ganz einfach in Emacs, in einem term
Puffer:Konfigurieren Sie font-lock-keywords
für term-mode
.
Allerdings sollte man sich genau überlegen, ob man diese Funktion wirklich immer haben möchte. Was ist, wenn der Befehl seine eigenen Farben hat (z. B. grep --color
, ls --color
)? Vielleicht wäre es besser, einen kurzen Alias für einen Colorizer-Befehl zu definieren und myCommand 2>&1|c
auszuführen wenn Sie myCommand
einfärben möchten Ausgabe von . Sie könnten auch einige spezifische Always-Colorize-Befehle aliasieren.
Beachten Sie, dass der Rückgabestatus einer Pipeline ihr letzter ist Befehl, also wenn Sie myCommand | c
ausführen , erhalten Sie den Status c
, nicht myCommand
. Hier ist ein Bash-Wrapper, der dieses Problem vermeidet, den Sie als w myCommand
verwenden können :
w () {
"[email protected]" | c
return $PIPESTATUS[0]
}
Sie können Programme verwenden wie:
- spc (Supercat)
- grc (generischer Kolorierer)
- hervorheben
- Histring
- pygmentisieren
- grep --color
Sie können so etwas tun, aber die Befehle sehen kein tty (einige werden sich weigern, zu laufen oder sich anders zu verhalten oder seltsame Dinge zu tun):
exec > >(histring -fEi error) # Bash