Karakter ^[[37mdan ^[[0mmerupakan bagian dari urutan pelarian ANSI (kode CSI) . Lihat juga spesifikasi ini .
Menggunakan GNU sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b(atau \x1B) adalah karakter spesial pelarian
( sedtidak mendukung alternatif \edan \033)
\[ adalah karakter kedua dari urutan pelarian
[0-9;]* adalah nilai warna regex
m adalah karakter terakhir dari urutan pelarian
⚠ Pada macOS, sedperintah default tidak mendukung karakter khusus seperti yang \editunjukkan oleh slm dan steamer25 di komentar. Gunakan sebaliknya gsedyang dapat Anda instal menggunakan brew install gnu-sed.
Contoh dengan baris perintah OP : (OP berarti Poster Asli)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Tom Hale menyarankan untuk menghapus semua urutan pelarian lainnya dengan menggunakan [a-zA-Z]alih-alih hanya huruf yang mspesifik untuk urutan melarikan diri mode grafis (warna). Tetapi [a-zA-Z]mungkin terlalu lebar dan bisa menghapus terlalu banyak. Michał Faleński dan Miguel Mota mengusulkan untuk menghapus hanya beberapa urutan melarikan diri menggunakan [mGKH]dan [mGKF]masing - masing. Britton Kerin menunjukkan Kjuga harus digunakan selain muntuk menghapus warna dari gcckesalahan / peringatan (jangan lupa untuk mengarahkan ulang 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
Menggunakan perl
Versi yang seddiinstal pada beberapa sistem operasi mungkin terbatas (mis. MacOS). Perintah ini perlmemiliki keuntungan karena secara umum lebih mudah untuk menginstal / memperbarui pada lebih banyak sistem operasi. Adam Katz menyarankan untuk menggunakan \e(sama seperti \x1b) di PCRE .
Pilih regex Anda tergantung pada seberapa banyak perintah yang ingin Anda filter:
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
Contoh dengan baris perintah OP:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
Pemakaian
Seperti yang ditunjukkan oleh komentar Stuart Cardall , sedbaris perintah ini digunakan oleh proyek Ultimate Nginx Bad Bot (1000 bintang) untuk membersihkan laporan email ;-)
moreatauless -Ryang dapat menafsirkan kode pelarian sebagai warna, bukan editor teks.