Die Zeichen ^[[37mund ^[[0msind 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
( sedunterstützt keine Alternativen \eund \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 sedkeine Sonderzeichen, wie in den Kommentaren \evon slm und steamer25 angegeben . Verwenden Sie stattdessen, gseddass 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 mzu 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 Kdarauf hin, dass zusätzlich zum mEntfernen der Farben aus gccFehler / 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 sedauf einigen Betriebssystemen installierte Version ist möglicherweise eingeschränkt (z. B. macOS). Der Befehl perlhat 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 sedBefehlszeile vom Projekt Ultimate Nginx Bad Bot (1000 Sterne) verwendet, um den E-Mail-Bericht zu bereinigen ;-)
moreoderless -Rdie Escape-Codes als Farbe anstelle eines Texteditors interpretieren.