Wie entferne ich ANSI-fy-Protokolle?

10

In letzter Zeit haben Befehlszeilentools die Tendenz, ausgefallene ANSI-Farben in ihrer Protokollausgabe zu verwenden (z. B. NPM und eine Vielzahl von NodeJS-basierten Tools, RVM, Docker und einige andere "moderne" Tools).

Dies macht es schön, auf dem Bildschirm zu lesen (*), aber nicht so schön, wenn Sie die Ausgabe in eine Protokolldatei oder über einen Transport leiten möchten, der ANSI nicht gut verarbeitet, wie verschiedene Remote-Ausführungstools und webbasierte Überwachungslösungen. Viele ausgereiftere Tools hatten zumindest den Anstand zu erkennen, wenn die Ausgabe kein TTY ist und die Farbe deaktiviert, aber nicht mit diesen neuen "benutzerfreundlichen" CLIs - was mir den Versuch lässt, die ANSI-Farben durch Piping loszuwerden die Ausgabe durch einen weiteren Prozess.

Das Aussetzen der Ausgabe s/\x1B\[[0-9]*\w//gscheint die Arbeit zu erledigen, aber gibt es einen saubereren Ansatz, als nur reguläre Ausdrücke in alle meine Skripte einzufügen?

(*) Zumindest bis das Tool versucht, Fehler in Dunkelrot auf Ihrem dunklen Hintergrundterminal anzuzeigen.

Guss
quelle
2
Siehe: unix.stackexchange.com/questions/14684/... - unix.stackexchange.com/questions/111899/... stackoverflow.com/questions/17998978/... superuser.com/questions/380772/... - Zwischen 4+ Fragen über Über einen Zeitraum von 3 Jahren an 3 Standorten haben wir nur Antworten erhalten, um ein Tool zu verwenden, das Regex ersetzt / entfernt. Ich würde vermuten, dass es nichts Besseres gibt.
Zoredache
Das einzige, was zur Debatte steht, ist, welcher Regex für welche Situation am besten geeignet ist.
Zoredache
1
is there a cleaner approach then just copy pasting regular expressions into all of my scripts?- Speichern Sie Ihren Bereinigungsfilter in einer Datei namens '/ usr / local / bin / stripttycolor.sh` oder so? Auf diese Weise haben Sie den regulären Ausdruck auf einen einzigen Ort beschränkt?
Zoredache
3
Wenn Sie wissen, dass Sie die Ausgabe in eine Datei schreiben, ist es (zumindest für NPM) am einfachsten, mit dem --no-colorFlag zu arbeiten. Viele andere Befehle haben ähnliche Flags.
Moshe Katz
@ MosheKatz: Leider funktionieren zum Beispiel nicht alle Befehle bower.
Guss

Antworten:

1

"ansifilter -p" könnte für Sie nützlich sein ...

Es ist in den Fedora-Repos; -p gibt eine einfache Ausgabe an:

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
quelle
Funktioniert gut, jetzt muss ich es nur noch für Ubuntu verpacken :-)
Guss