grep --color aggiunge il codice ANSI ESC [K - Questo può cambiare il testo visualizzato


9

Perché grep aggiunge il codice ANSI \e[Kal suo output colorato? Non riesco a capire il punto, ma ovviamente gli sviluppatori possono farlo. È un codice terminale ANSI / VT100 che viene utilizzato per "Cancella linea dalla posizione corrente del cursore alla fine della linea" .

In un caso marginale, grep può far "svanire" il testo dal display del terminale. Per esempio:

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

Il semplice eco visualizza :,cb ma il display colorato mostra:c

Il testo codificato sottostante è: echo -e 'ab\r\033[01;31m\033[Kc\033[m\033[K' Tuttavia, senza i \e[Kcodici, echo -e 'ab\r\033[01;31mc\033[m'funziona come previsto!

Qual è il motivo dell'inclusione di questi \e[Kcodici da parte di grep . Sto scrivendo uno script per consentire la sovrapposizione di un secondo passaggio colorizing , come in: c=--color=always; ls $c /bin/gzip | grep $c 'z'. quindi ho bisogno di capire perché Grep usa \e[K.

Risposte:


11

È possibile modificare questo comportamento impostando la GREP_COLORSvariabile di ambiente:

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

Dalla greppagina man:

          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).

In primo luogo viene impostato per impostare lo sfondo del resto della linea sul colore corretto, nel caso in cui sia stato modificato in precedenza (anche se per impostazione predefinita non lo è; qualcuno potrebbe impostarlo per farlo nelle proprie impostazioni).

Potresti anche voler giocare con le altre opzioni che puoi impostare GREP_COLORS; vedere la pagina man per tutti i dettagli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.