Os backticks '' no comando echo geram um processo e sua saída é substituída na linha de comando echo. Você pode ver isso com, por exemplo.
echo "'tput setaf 1'" | hexdump -C
00000000 1b 5b 33 31 6d 0a |.[31m.|
Isso funciona porque o conteúdo do "..."
é expandido antes de ser passado para o eco.
O comando sed que você está usando envolve tudo em '
, de modo que é passado para o sed sem expansão e o sed vê tudo como texto literal.
Você pode consertar isso colocando "" em volta do seu comando sed
echo "foo" | sed -e "s/\(foo\)/'tput setaf 1''tput op'/g"
Você também teve um erro no seu comando sed. Os (
e )
precisam ter o escape \(
e \)
para denotar o padrão lembrado. Eu também nunca usei
Eu sempre usei %code% como o primeiro padrão lembrado.