Färben Sie verschiedene Textblöcke in derselben Ausgabe mit unterschiedlichen Farben ein

Färben Sie verschiedene Textblöcke in derselben Ausgabe mit unterschiedlichen Farben ein

>>>Ich habe ein Skript, das E/A-Daten mit einer symbolisierenden Richtung ausspuckt <<<– entweder Eingabe ( <<<) oder Ausgabe ( >>>).

<timestamp> >>>>>>>>>>
loads
of
output

<timestamp> <<<<<<<<<<
loads
of
input

Ich möchte diese Ausgabe nehmen und die Eingabe mit einer Farbe und die Ausgabe mit einer anderen einfärben – ungefähr so, wie git diffdie Unterschiede in Dateiversionen eingefärbt werden.

Wie kann ich dies mit möglichst wenig Tippaufwand und vorzugsweise als Einzeiler tun?

Antwort1

Vielleicht funktioniert so etwas awkfür Sie:

awk 'BEGIN{ce="\033[0m"}
     />>>/{cs="\033[1;31m"}
     /<<</{cs="\033[1;32m"}
     {print cs$0ce}' your.data

Das ist:

BEGIN {
    ce = "\033[0m"
}
/>>>/ {
    cs = "\033[1;31m"
}
/<<</ {
    cs = "\033[1;32m"
}
{
    print cs $0 ce
}

Antwort2

Im Interesse semantischer Lösungen, die ausschließlich auf der Shell basieren und vom Terminal unabhängig sind, gibt es hier eine andere Möglichkeit zur Farbgebung, bei der verwendet wird. tputDieses nutzt die Terminfo-Datenbank, um für alle erkannten Terminals die richtige Farbwechselsequenz bereitzustellen:

black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
off=$(tput sgr0)

echo ${red}some red text${blue} some blue text${green} and green${off} and back to normal.

verwandte Informationen