Il y a deux problèmes dans votre echo
commande.
J'ai développé les variables par souci de concision.
$ echo -e "test TEST test" | sed -e "s/TEST/\e[1;37mTEST\e[0m/g"
test e[1;37mTESTe[0m test
Premier problème: les contre-obliques se perdent quelque part entre la magie sed et la magie shell. Vous devez leur échapper.
$ echo -e "test TEST test" | sed -e "s/TEST/\\e[1;37mTEST\\e[0m/g"
test e[1;37mTESTe[0m test
Ça ne marche toujours pas. Peut-être plus échappant?
$ echo -e "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g"
test \e[1;37mTEST\e[0m test
Finalement, les contre-obliques arrivent. Je ne sais pas pourquoi nous avons besoin de trois barres obliques inverses, c'est de la magie sed séduisante.
Deuxième problème: le echo -e
est inutile. -e
permet d'interpréter les échappements de barre oblique inverse, mais tout ce qui echo -e
arrive à interpréter est "test TEST test"
. Les échappements de barre oblique inversée proviennent de sed, qui ne se soucie pas d'eux et les imprime bruts.
Ce que vous voulez c'est:
$ echo -e $(echo "test TEST test" | sed -e "s/TEST/\\\e[1;37mTEST\\\e[0m/g")
test TEST test
avec un TEST gras en sortie.
Voici le script complet avec les modifications:
#!/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}"
affiche «\ AAAA». C'est dommage, car je dois garder regular_color_constants et SED_color_constants. En fait, je veux avoir seulement regular_color_constants, et corriger les options echo et sed pour obtenir ce que je veux.