grep --color menambahkan kode ANSI ESC [K - Ini dapat mengubah teks yang ditampilkan

9

Mengapa grep menambahkan kode ANSI \e[Kke keluaran berwarna? Saya tidak bisa mengerti intinya, tetapi jelas para pengembang bisa. Ini adalah kode Terminal ANSI / VT100 yang digunakan untuk "Hapus baris dari posisi kursor saat ini ke akhir baris" .

Dalam kasus pinggiran, grep dapat menyebabkan teks "menghilang" dari tampilan terminal. Sebagai contoh:

echo -e "ab\rc"
echo -e "ab\rc" |grep --color=always "c"

Sederhana gema menampilkan: cb, tapi berwarna display menunjukkan:c

Teks disandikan yang mendasarinya adalah: echo -e 'ab\r\033[01;31m\033[Kc\033[m\033[K' Namun, tanpa \e[Kkode, echo -e 'ab\r\033[01;31mc\033[m'berfungsi seperti yang diharapkan!

Apa alasan grep memasukkan \e[Kkode - kode ini . Saya menulis naskah untuk memungkinkan overlay dari colorizing kedua lulus , seperti di: c=--color=always; ls $c /bin/gzip | grep $c 'z'. jadi saya perlu mengerti mengapa grep menggunakan \e[K.

Peter.O
sumber

Jawaban:

11

Anda dapat mengubah perilaku ini dengan mengatur GREP_COLORSvariabel lingkungan:

export GREP_COLORS=ne
echo -e "ab\rc" | grep --color=always "c"

Dari grephalaman manual:

          ne     Boolean  value  that prevents clearing to the end of line
                 using Erase in Line (EL) to Right  (\33[K)  each  time  a
                 colorized  item  ends.   This  is  needed on terminals on
                 which EL is not supported.  It  is  otherwise  useful  on
                 terminals  for  which  the back_color_erase (bce) boolean
                 terminfo capability  does  not  apply,  when  the  chosen
                 highlight colors do not affect the background, or when EL
                 is too slow or causes too much flicker.  The  default  is
                 false (i.e., the capability is omitted).

Ini dilakukan di tempat pertama untuk mengatur latar belakang sisa baris ke warna yang benar, jika itu diubah sebelumnya (meskipun secara default tidak; seseorang mungkin mengaturnya untuk melakukannya dalam pengaturan mereka sendiri).

Anda mungkin juga ingin bermain dengan opsi lain yang dapat diatur GREP_COLORS; lihat halaman manual untuk detail lengkap.

Michael Hampton
sumber