GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Farbhervorhebungsausgabe basierend auf Regex in der Shell

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

Linux
  1. Was ist der Unterschied zwischen dem Abrufen der Befehlsausgabe mit "command" und $(command) in der Shell??

  2. Farbausgabe des unter BASH ausgeführten Programms

  3. Warum wird diese Shell-Pipeline beendet?

  4. Ist es möglich, die an more geleitete Ausgabe einzufärben?

  5. Mehrzeilige Ausgabe in einem Shell-Skript einrücken

So führen Sie Shell-Befehle über einen HTTP-Server aus

So leiten Sie die Shell-Befehlsausgabe um

Shell-Scripting Teil 4 – Eingabe, Ausgabe und Umleitung

Farbige Shell-Script-Ausgabebibliothek

Befehlsausgabe im Docker umleiten

Ändern Sie den Standard-Crontab-Editor in FreeBSD in Nano