Znaki ^[[37mi ^[[0msą 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
( sednie obsługuje alternatyw \ei \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 sedpolecenie nie obsługuje znaków specjalnych, takich jak \ejak podkreślił SLM i steamer25 w komentarzach. Zamiast gsedtego 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 mspecyficznej 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 Knależy również użyć mdo usunięcia kolorów z gccbłę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 sedzainstalowana w niektórych systemach operacyjnych może być ograniczona (np. MacOS). perlZaletą 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 sedwiersz poleceń jest używany w projekcie Ultimate Nginx Bad Bot (1000 gwiazdek) do czyszczenia raportu e-mail ;-)
morelubless -Rktóre mogą interpretować kody specjalne jako kolory zamiast edytora tekstu.