Karakter ^[[37m
dan ^[[0m
merupakan 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
( sed
tidak mendukung alternatif \e
dan \033
)
\[
adalah karakter kedua dari urutan pelarian
[0-9;]*
adalah nilai warna regex
m
adalah karakter terakhir dari urutan pelarian
⚠ Pada macOS, sed
perintah default tidak mendukung karakter khusus seperti yang \e
ditunjukkan oleh slm dan steamer25 di komentar. Gunakan sebaliknya gsed
yang 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 m
spesifik 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 K
juga harus digunakan selain m
untuk menghapus warna dari gcc
kesalahan / 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 sed
diinstal pada beberapa sistem operasi mungkin terbatas (mis. MacOS). Perintah ini perl
memiliki 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 , sed
baris perintah ini digunakan oleh proyek Ultimate Nginx Bad Bot (1000 bintang) untuk membersihkan laporan email ;-)
more
atauless -R
yang dapat menafsirkan kode pelarian sebagai warna, bukan editor teks.