Suposição: você está tentando isso através de um pipe.
OBSERVAÇÃO: cal
imprime códigos de cores somente para tty
.
Primeiro, se você for substituir o que cal
envia pelo canal, será necessário verificar o que o cal
envia para esse canal.
$ cal | od -t x1z -w$((($COLUMNS-12)/4)) 0000000 20 20 20 20 20 4a 75 6c 69 20 32 30 31 35 20 20 20 20 > Juli 2015 < 0000022 20 20 20 20 0a 73 c3 b6 20 6d c3 a5 20 74 69 20 6f 6e > .s.. m.. ti on< 0000044 20 74 6f 20 66 72 20 6c c3 b6 20 20 0a 20 20 20 20 20 > to fr l.. . < 0000066 20 20 20 20 20 31 20 20 32 20 20 33 20 20 34 20 20 0a > 1 2 3 4 .< 0000110 20 35 20 5f 08 20 5f 08 36 20 20 37 20 20 38 20 20 39 > 5 _. _.6 7 8 9< 0000132 20 31 30 20 31 31 20 20 0a 31 32 20 31 33 20 31 34 20 > 10 11 .12 13 14 < 0000154 31 35 20 31 36 20 31 37 20 31 38 20 20 0a 31 39 20 32 >15 16 17 18 .19 2< 0000176 30 20 32 31 20 32 32 20 32 33 20 32 34 20 32 35 20 20 >0 21 22 23 24 25 < 0000220 0a 32 36 20 32 37 20 32 38 20 32 39 20 33 30 20 33 31 >.26 27 28 29 30 31< 0000242 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 > . < 0000264 20 20 20 20 20 20 20 20 20 20 0a > .< 0000277
Verificando os códigos hexadecimais (de od -t x1
) acima, você vê a sequência de 35 20 5f 08 20 5f 08 36 20 20 37
onde 35
(primeiros dois caracteres) são iguais a 5
e o último 37
é o mesmo que 7
na saída real (e no dump ascii à direita).
Pouco antes de 37
você tem um par de 20
(espaços) e há um 36
que é do 6
.
Agora, apenas à esquerda do 36
, você vê o que precisa substituir: 5f 08 20 5f 08
$ cal | sed -re 's/\x5f\x08\x20\x5f\x086/<strong>6<\/strong>/' Juli 2015 sö må ti on to fr lö 1 2 3 4 5 <strong>6</strong> 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Lá vai você. Eu vou deixar a tarefa de fazer isso para você.
Uma dica adicional, verifique
man 5 terminfo
para que as coisas tentem com tput
- isso se adaptará o máximo possível ao tipo de terminal disponível em tempo de execução.
Portanto, tput setb 6
definirá a cor de fundo 6, se o terminal for capaz disso. E da mesma forma, tput sgr0
redefinirá todas as configurações de cor para "normal".
E se você enviar a saída tput para, por exemplo, od -t x1z
, você verá qual é a saída.
Resultado final: um script muito mais portátil do que um usando echo -e ...