Comment «dés-ANSI-fy» journaux?


10

Dernièrement, les outils de ligne de commande ont eu tendance à utiliser des couleurs ANSI fantaisie dans leur sortie de journal (par exemple, NPM et une foule d'outils basés sur nodejs, rvm, docker et quelques autres outils "modernes").

Cela le rend agréable à lire à l'écran (*), mais pas si agréable lorsque vous souhaitez diriger la sortie vers un fichier journal ou via un transport qui ne gère pas bien ANSI, comme divers outils d'exécution à distance et solutions de surveillance basées sur le Web. Beaucoup d'outils plus matures ont au moins eu la décence de détecter quand la sortie n'est pas un TTY et de désactiver la couleur, mais pas avec ces nouvelles CLI "faciles à utiliser" - ce qui me laisse essayer de me débarrasser des couleurs ANSI par piping la sortie à travers encore un autre processus.

Séduire la sortie s/\x1B\[[0-9]*\w//gsemble faire le travail, mais y a-t-il une approche plus propre alors copier simplement coller des expressions régulières dans tous mes scripts?

(*) au moins jusqu'à ce que l'outil essaie d'afficher les erreurs en rouge foncé sur votre terminal à fond sombre.


2
Voir: unix.stackexchange.com/questions/14684/… - unix.stackexchange.com/questions/111899/… stackoverflow.com/questions/17998978/… superuser.com/questions/380772/… - Entre 4+ questions sur sur une période de 3 ans sur 3 sites, nous n'avons obtenu de réponses que pour utiliser un outil qui effectue le remplacement / la suppression des regex. Je suppose qu'il n'y a rien de mieux.
Zoredache

La seule chose qui semble à débattre est quelle expression régulière est la meilleure pour quelle situation.
Zoredache

1
is there a cleaner approach then just copy pasting regular expressions into all of my scripts?- Enregistrez votre filtre de nettoyage dans un fichier appelé '/ usr / local / bin / stripttycolor.sh` ou quelque chose? De cette façon, vous avez le regex confiné à un seul emplacement?
Zoredache

3
Si vous savez que vous allez écrire la sortie dans un fichier, la chose la plus simple à faire (au moins pour NPM) est d'exécuter avec l' --no-colorindicateur. De nombreuses autres commandes ont également des indicateurs similaires.
Moshe Katz

@MosheKatz: malheureusement, toutes les commandes ne le font pas, par exemple bower.
Guss

Réponses:


1

"ansifilter -p" pourrait vous être utile ...

C'est dans les dépôts Fedora; -p spécifie une sortie simple:

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).

Fonctionne bien, maintenant je dois juste le faire emballer pour Ubuntu :-)
Guss
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.