Ihr echo
Befehl enthält zwei Probleme .
Ich habe die Variablen der Kürze halber erweitert.
$ echo -e "test TEST test" | sed -e "s/TEST/\e[1;37mTEST\e[0m/g"
test e[1;37mTESTe[0m test
Erstes Problem: Die Backslashes gehen irgendwo zwischen Sed Magic und Shell Magic verloren. Du musst ihnen entkommen.
$ echo -e "test TEST test" | sed -e "s/TEST/\\e[1;37mTEST\\e[0m/g"
test e[1;37mTESTe[0m test
Funktioniert immer noch nicht. Vielleicht mehr entkommen?
$ echo -e "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g"
test \e[1;37mTEST\e[0m test
Endlich kommen die Backslashes durch. Ich habe keine Ahnung, warum wir drei Backslashes brauchen, das ist eine seltsame Sed-Magie.
Zweites Problem: Das echo -e
ist sinnlos. -e
ermöglicht die Interpretation von Backslash-Escapezeichen, aber alles, was echo -e
zu interpretieren ist, ist "test TEST test"
. Die Backslash-Fluchten kommen von sed, das sich nicht um sie kümmert und sie roh druckt.
Was Sie wollen, ist Folgendes:
$ echo -e $(echo "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g")
test TEST test
mit fettem TEST in der Ausgabe.
Hier ist das vollständige Skript mit den Änderungen:
#!/bin/bash
ColorOff='\\\e[0m' # Text Reset
BWhite='\\\e[1;37m' # Bold White
string="test TEST test"
echo -e $(echo "$string" | sed -e "s/TEST/${BWhite}TEST${ColorOff}/g")
echo -e "${BWhite}AAAA${ColorOff}"
zeigt `\ AAAA`. Schade, denn dann muss ich reguläre Farbkonstanten und SED-Farbkonstanten behalten. Eigentlich möchte ich nur reguläre Farbkonstanten haben und Echo- und Sed-Optionen korrigieren, um das zu bekommen, was ich will.$string
einen Backslash enthält?) Und ist etwas komplizierter als nötig. Um das Zitieren zu verstehen, nehmen Sie die Dinge einzeln. ZB sind die drei Backslashes überhaupt keine magische Magie: Erstens gibt es doppelte Anführungszeichen und es handelt sich um eine zweistellige"\\\e"
Zeichenfolge\e
; dann versteht sed\e
als "der Charaktere
wörtlich".