Como "un-ANSI-fy" logs?

10

Ultimamente, tem havido uma tendência pelas ferramentas de linha de comando de usar cores ANSI sofisticadas em sua saída de log (por exemplo, NPM e várias ferramentas baseadas em nodejs, rvm, docker e algumas outras ferramentas "modernas").

Isso facilita a leitura na tela (*), mas não é tão bom quando você deseja canalizar a saída para um arquivo de log ou através de um transporte que não lida com ANSI, como várias ferramentas de execução remota e soluções de monitoramento baseadas na Web. Muitas ferramentas mais maduras tiveram a decência de detectar quando a saída não é um TTY e desativar a cor, mas não com as novas CLIs "amigáveis" e fangled - o que me deixa tentando livrar-se das cores ANSI por meio de tubulação a saída através de mais um processo.

Sediar a saída s/\x1B\[[0-9]*\w//gparece fazer o trabalho, mas existe uma abordagem mais limpa, basta copiar colar expressões regulares em todos os meus scripts?

(*) pelo menos até que a ferramenta tente exibir erros em vermelho escuro no seu terminal de fundo escuro.

Guss
fonte
2
Consulte: unix.stackexchange.com/questions/14684/… - unix.stackexchange.com/questions/111899/… stackoverflow.com/questions/17998978/… superuser.com/questions/380772/… - entre mais de 4 perguntas sobre em um período de três anos em três sites, obtivemos apenas respostas para usar uma ferramenta que faz a substituição / remoção de expressões regulares. Eu acho que não há nada melhor.
Zoredache
A única coisa que parece suscetível de debate é qual regex é a melhor para qual situação.
Zoredache
1
is there a cleaner approach then just copy pasting regular expressions into all of my scripts?- Salve seu filtro de limpeza em um arquivo chamado '/ usr / local / bin / stripttycolor.sh` ou algo assim? Dessa forma, você tem o regex confinado a um único local?
Zoredache
3
Se você sabe que gravará a saída em um arquivo, a coisa mais fácil a ser executada (pelo menos para o NPM) é executar com o --no-colorsinalizador. Muitos outros comandos também possuem sinalizadores semelhantes.
Moshe Katz
@ MosheKatz: infelizmente nem todos os comandos fazem, por exemplo bower.
Guss

Respostas:

1

"ansifilter -p" pode ser útil para você ...

Está nos repositórios do Fedora; -p especifica saída simples:

Name        : ansifilter
From repo   : updates
Summary     : ANSI terminal escape code converter
URL         : http://www.andre-simon.de/doku/ansifilter/ansifilter.php
License     : GPLv3+
Description : Ansifilter handles text files containing ANSI terminal escape codes.
            : The command sequences may be stripped or be interpreted to generate formatted
            : output (HTML, RTF, TeX, LaTeX, BBCode).
Liczyrzepa
fonte
Funciona muito bem, agora eu só preciso para obtê-lo embalado para Ubuntu :-)
Guss