Znaki ^[[37m
i ^[[0m
są częścią sekwencji ucieczkowych ANSI (kody CSI) . Zobacz także te specyfikacje .
Korzystanie z GNU sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b
(lub \x1B
) jest specjalnym znakiem ucieczki
( sed
nie obsługuje alternatyw \e
i \033
)
\[
jest drugim znakiem sekwencji ucieczki
[0-9;]*
to wyrażenia regularne wartości koloru
m
jest ostatnim znakiem sekwencji ucieczki
⚠ na MacOS, domyślne sed
polecenie nie obsługuje znaków specjalnych, takich jak \e
jak podkreślił SLM i steamer25 w komentarzach. Zamiast gsed
tego użyj , że możesz zainstalować za pomocą brew install gnu-sed
.
Przykład z linią poleceń OP : (OP oznacza Plakat oryginalny)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Tom Hale sugeruje usunięcie wszystkich innych sekwencji ucieczki, używając [a-zA-Z]
zamiast litery m
specyficznej dla sekwencji ucieczki trybu graficznego (koloru). Ale [a-zA-Z]
może być zbyt szeroki i może usunąć zbyt wiele. Michał Faleński i Miguel Mota proponują usunięcie tylko niektórych sekwencji ucieczki za pomocą odpowiednio [mGKH]
i [mGKF]
. Britton Kerin wskazuje, że K
należy również użyć m
do usunięcia kolorów z gcc
błędu / ostrzeżenia (nie zapomnij przekierować 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
Za pomocą perl
Wersja sed
zainstalowana w niektórych systemach operacyjnych może być ograniczona (np. MacOS). perl
Zaletą tego polecenia jest to, że ogólnie łatwiej jest je zainstalować / zaktualizować w większej liczbie systemów operacyjnych. Adam Katz sugeruje użycie \e
(takiego samego jak \x1b
) w PCRE .
Wybierz wyrażenie regularne w zależności od liczby poleceń, które chcesz filtrować:
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
Przykład z linią poleceń OP:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
Stosowanie
Jak wskazał komentarz Stuarta Cardalla , ten sed
wiersz poleceń jest używany w projekcie Ultimate Nginx Bad Bot (1000 gwiazdek) do czyszczenia raportu e-mail ;-)
more
lubless -R
które mogą interpretować kody specjalne jako kolory zamiast edytora tekstu.