Quando você usa o grep com opções de cores, ele produz sequências de caracteres de escape extras que indicam ao terminal para ativar ou desativar a cor, essas sequências apresentam um risco de não serem interpretadas corretamente e causar resultados inesperados. Você pode visualizá-los capturando a saída do grep
Sem cor
envia a saída do greps para output.txt
% grep -o --color=none '.\+ middle .\+' foo.txt > output.txt
% cat -etv output.txt
This is the middle line.$
Com cor
Forçando a cor com a opção --color=always
. Se você redirecionar a saída do greps, se possível, a cor será desativada pelo motivo exato que você destacou, os caracteres de escape podem produzir efeitos colaterais.
% grep -o --color=always '.\+ middle .\+' foo.txt > output.txt
% cat -etv output.txt
^[[01;31m^[[KThis is the middle line.^[[m^[[K$
É possível que essas sequências de escape estejam causando o problema.