Seu cpp está no formato DOS, ou seja, sua terminação de linha é feita por sequências \ r \ n e você tem um alias 'grep --color = auto' existente para o grep em sua sessão ao mesmo tempo. Esse alias coloca o terminal controlando as seqüências de escape ao redor da string correspondente. Se essa string for um caractere de palavra, ela não incomodará a saída no terminal. No entanto, se a string contiver um caractere de retorno de carro (\ r que corresponde ao último caractere de *), ele parece causar esse efeito colateral quando é cercado pelas seqüências.
Quando chamado usando --color = auto, o grep reconhece quando sua saída é enviada para pipe e então não colora a string, evitando assim o efeito colateral e aparecendo.
Depois de grep unaliasing, o fenômeno desaparece.
Para lhe dizer toda a verdade, isso não era algo óbvio, demorou um pouco para que me perguntasse por que a saída enviada para o arquivo está correta, mesmo quando uso o padrão mais longo, enquanto ele não mostra nada quando a saída vai para o terminal.