Muitos programas que geram saída colorida detectam se estão gravando em um TTY e desativam as cores se não estiverem. Isso ocorre porque os códigos de cores são irritantes quando você deseja capturar apenas o texto, então eles tentam "fazer a coisa certa" automaticamente.
A maneira mais simples de capturar a saída em cores de um programa como esse é pedir para ele escrever cores, mesmo que não esteja conectado a um TTY. Você precisará ler a documentação do programa para descobrir se ele possui essa opção. (por exemplo, greptem a --color=alwaysopção.)
Você também pode usar o expectscript unbufferpara criar um pseudo-tty como este:
echo barney | unbuffer grep barney | sed -n 1,$\ p
lessa entrada pode aceitar colorizado texto (nice :) ... por exemplo:tree -C ~/ |less -Rouls -lR --color=always . |less -R