Processe códigos de escape ANSI antes da canalização

3

Estou tentando canalizar a saída de um script (Mocha) para outro script. No entanto, há um problema: Mocha gera alguns caracteres de escape ansi para atualizar a tela na mosca. Esses caracteres também são enviados pelo pipe.

Existe uma maneira de processar a sequência ansi de forma que a saída seja a mesma que a saída final para a tela? Eu quero manter as seqüências de escape de cores, mas o movimento do cursor não escapa.

Edit: Eu tenho uma solução parcial agora (somente para o Mocha): até agora parece que o Mocha com a saída de especificação (aquela que eu uso) apenas gera caracteres ecape e a seqüência de escape CSI 0G . O caractere de escape CSI 0G significa que o cursor deve voltar ao início da linha. O Mocha usa isso para sobrescrever uma linha completamente. Portanto, você poderia simplesmente criar um regexp de sed que excluiria tudo até a sequência de escape em uma linha: sed 's/^.*\x1b\[0G//g' . Ainda estou procurando a solução completa.

    
por Tiddo 17.10.2012 / 22:45

1 resposta

0

sed -e 's/\x1b\[[0-9?]\+[^m0-9?]//g'

deve remover todos os códigos de escape que não sejam códigos "Selecionar representação gráfica", como cor, negrito e itálico.

Editar: Você também deve usar seu filtro sed 's/^.*\x1b\[0G//g' antes do meu, se quiser que o texto anterior seja sobrescrito. Caso contrário, tanto o texto anterior como o novo texto serão emitidos. Se você quer que todas as seqüências sejam executadas de modo que a saída seja a mesma do que seria exibido em um emulador de terminal, você teria que fazer algum tipo de emulador de terminal de fundo que pudesse realmente executar todos os códigos e, nesse ponto, tal projeto eclipse ansifilter .

    
por 09.03.2016 / 04:42

Tags