Primeiramente, aspas duplas são necessárias para a interpolação:
$ sed "s/2/${RED}2${BLUE}/" Hello.txt
1233[0;31m2233[0;34m53125213
233[0;31m2233[0;34m13532135
233[0;31m2233[0;34m3513125215
No entanto, as seqüências de escape ASCII contêm caracteres que afetam sed, portanto, você precisa converter a seqüência de caracteres de escape em caracteres de controle reais. Isso pode ser feito através do uso de um subshell. Observe o /g
final, o que significa que várias substituições são permitidas por linha.
$ sed "s/2/'echo $RED'2'echo $BLUE'/g" Hello.txt
Agora,issoaindanãoestácerto.Oquerealmentedeveríamosfazeréconfigurarcadalinhaparacomeçaremazule,emseguida,fazercomquecadasubstituiçãode2
comeceemvermelhoetermineemazul.Ocaracteredechapéu,^
,éumaexpressãoregularquesignificaoiníciodeumalinha.Observetambémostuboseorearranjoparausarcat
.
$catHello.txt|sed"s/^/'echo $BLUE'/" | sed "s/2/'echo $RED'2'echo $BLUE'/g"
Vocêtambémpodetorná-lomaislimpo,movendoaconversãodesubshellparasuaatribuiçãodevariável.OscolchetesencaracoladossãonecessáriosparaRED
,demodoadistingui-lodocaractere2
paraqueelenãotenteusaravariávelinexistenteRED2
.
$BLUE='echo'3[0;34m''$RED='echo'3[0;31m''$catHello.txt|sed"s/^/$BLUE/" | sed "s/2/${RED}2${BLUE}/g"
Fonte: link