>>>
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 diff
die 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 awk
fü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. tput
Dieses 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.