grep --color agrega el código ANSI ESC [K - Esto puede cambiar el texto mostrado

9

¿Por qué grep agrega código ANSI \e[Ka su salida coloreada? No puedo entender el punto, pero obviamente los desarrolladores sí. Es un código de terminal ANSI / VT100 que se utiliza para "Borrar línea desde la posición actual del cursor hasta el final de la línea" .

En un caso marginal, grep puede hacer que el texto "desaparezca" de la pantalla del terminal. Por ejemplo:

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

El eco simple muestra: cbpero la pantalla coloreada muestra:c

El texto codificado subyacente es: echo -e 'ab\r\033[01;31m\033[Kc\033[m\033[K' Sin embargo, sin los \e[Kcódigos, echo -e 'ab\r\033[01;31mc\033[m'funciona como se esperaba.

¿Cuál es la razón para la inclusión de estos \e[Kcódigos por parte de grep ? Estoy escribiendo un guión para permitir la superposición de un segundo pase colorizing , como en: c=--color=always; ls $c /bin/gzip | grep $c 'z'. así que necesito entender por qué usa grep \e[K.

Peter.O
fuente

Respuestas:

11

Puede cambiar este comportamiento configurando la GREP_COLORSvariable de entorno:

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

Desde la greppágina del 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).

En primer lugar, se hace para establecer el fondo del resto de la línea en el color correcto, en caso de que se haya cambiado antes (aunque por defecto no lo es; alguien podría configurarlo para que lo haga en su propia configuración).

También es posible que desee jugar con las otras opciones que se pueden configurar GREP_COLORS; Vea la página del manual para más detalles.

Michael Hampton
fuente