Die Zeichen ^[[37m
und ^[[0m
sind Teil der ANSI-Escape-Sequenzen (CSI-Codes) . Siehe auch diese Spezifikationen .
GNU verwenden sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b
(oder \x1B
) ist das Escape- Sonderzeichen
( sed
unterstützt keine Alternativen \e
und \033
)
\[
ist das zweite Zeichen der Escape-Sequenz
[0-9;]*
ist der Farbwert (die Farbwerte) für Regex
m
ist das letzte Zeichen der Escape-Sequenz
⚠ Unter macOS unterstützt der Standardbefehl sed
keine Sonderzeichen, wie in den Kommentaren \e
von slm und steamer25 angegeben . Verwenden Sie stattdessen, gsed
dass Sie mit installieren können brew install gnu-sed
.
Beispiel mit der Befehlszeile von OP: (OP bedeutet Original Poster)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Tom Hale schlägt vor, alle anderen Escape-Sequenzen zu entfernen, [a-zA-Z]
anstatt nur den Buchstaben m
zu verwenden, der für die Escape-Sequenz des Grafikmodus (Farbe) spezifisch ist. Aber [a-zA-Z]
kann zu breit sein und könnte zu viel entfernen. Michał Faleński und Miguel Mota schlagen vor, nur einige Escape-Sequenzen mit [mGKH]
und zu entfernen [mGKF]
. Britton Kerin weist K
darauf hin, dass zusätzlich zum m
Entfernen der Farben aus gcc
Fehler / Warnung auch verwendet werden muss (nicht vergessen, umzuleiten gcc 2>&1 | sed...
).
sed 's/\x1b\[[0-9;]*m//g' # Remove color sequences only
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' # Remove all escape sequences
sed 's/\x1b\[[0-9;]*[mGKH]//g' # Remove color and move sequences
sed 's/\x1b\[[0-9;]*[mGKF]//g' # Remove color and move sequences
Last escape
sequence
character Purpose
--------- -------------------------------
m Graphics Rendition Mode (including Color)
G Horizontal cursor move
K Horizontal deletion
H New cursor position
F Move cursor to previous n lines
Verwenden perl
Die sed
auf einigen Betriebssystemen installierte Version ist möglicherweise eingeschränkt (z. B. macOS). Der Befehl perl
hat den Vorteil, dass er auf mehr Betriebssystemen im Allgemeinen einfacher zu installieren / aktualisieren ist. Adam Katz schlägt vor, \e
(dasselbe wie \x1b
) in PCRE zu verwenden .
Wählen Sie Ihren regulären Ausdruck abhängig davon, wie viele Befehle Sie filtern möchten:
perl -pe 's/\e\[[0-9;]*m//g' # Remove colors only
perl -pe 's/\e\[[0-9;]*[mG]//g'
perl -pe 's/\e\[[0-9;]*[mGKH]//g'
perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'
perl -pe 's/\e\[[0-9;]*m(?:\e\[K)?//g' # Adam Katz's trick
Beispiel mit der Kommandozeile von OP:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
Verwendungszweck
Wie in Stuart Cardalls Kommentar erwähnt, wird diese sed
Befehlszeile vom Projekt Ultimate Nginx Bad Bot (1000 Sterne) verwendet, um den E-Mail-Bericht zu bereinigen ;-)
more
oderless -R
die Escape-Codes als Farbe anstelle eines Texteditors interpretieren.