Ich habe einen Befehl, der eine Ausgabe in Farbe erzeugt, und ich möchte ihn in eine Datei umleiten, deren Farbcodes entfernt wurden. Gibt es einen Befehl, der funktioniert, cat
außer dass er Farbcodes entfernt? Ich habe vor, so etwas zu machen:
$ command-that-produces-colored-output | stripcolorcodes > outfile
isatty(stdin)
vorher überprüft . Möchten Sie mitteilen, was das für ein Programm ist?cat
- Schnelltest, den ich ausgeführt habe,grep --color=auto myusername /etc/passwd
gibt mir meinen Benutzernamen in rot mit weißem Text an anderer Stelle.grep --color=auto myusername /etc/passwd | cat
gibt mir einfachen weißen Textgrep --color=auto
keine farbige Ausgabe erzeugt wird, wenn die Standardausgabe kein Terminal ist. Ich spreche von einem Befehl, der bedingungslos Farbcodes ausgibt. (Wie Alex oben ausführt, ist ein solches Verhalten wahrscheinlich ein Fehler, aber manchmal müssen wir mit unvollständiger Software arbeiten, die wir nicht einfach selbst beheben können, und darum geht es in dieser Frage.)Antworten:
Sie würden denken, dass es dafür ein Dienstprogramm geben würde, aber ich konnte es nicht finden. Dieser Perl-Einzeiler sollte jedoch den Trick machen:
Beispiel:
Oder, wenn Sie ein Skript möchten, können Sie speichern als
stripcolorcodes
:Wenn Sie nur Farbcodes entfernen und andere ANSI-Codes (wie die Cursorbewegung) in Ruhe lassen möchten , verwenden Sie
anstelle der Ersetzung, die ich oben verwendet habe (die alle ANSI-Escape-Codes entfernt).
quelle
Term::ANSIColor
. Bitte geben Sie Ihre Quellen an!Entfernen Sie Farbcodes (Sonderzeichen) mit GNU sed
Oder
Strip ANSI-Escape-Sequenzen in Python
Installieren Sie das colorama Python-Paket (
pip install colorama
). Setzen Sie instripcolorcodes
:Rennen
chmod +x stripcolorcodes
.quelle
sed
ist beeindruckend :)Wenn Sie das Term :: ANSIColor- Modul installieren können, funktioniert dieses Perl-Skript:
quelle
perl -mTerm::ANSIColor=colorstrip -n -e 'print colorstrip $_'
Wenn Ihr System Zugriff auf NodeJS hat, können Sie das folgende Node-Paket installieren
strip-ansi-cli
.Sie können Ihren Befehl dann folgendermaßen ausführen:
quelle
Dieser sed Befehl hat es für mich getan:
Beispiel:
quelle
sed
.Sie können dafür ac verwenden . Es sollte schneller sein als alles, was oben aufgeführt ist (obwohl
perl
undsed
sollte anständig sein). Hier ist ein Beispiel:Als Haftungsausschluss: Die Farbfilterfunktion wurde von mir geschrieben.
quelle
ac
Programm scheint hier zu sein: hub.darcs.net/vmchale/fastcat... und wenn nötig,
(dnf, ...) install ansifilter
quelle