grep --color ajoute le code ANSI ESC [K - Cela peut changer le texte affiché

9

Pourquoi grep ajoute-t-il du code ANSI \e[Kà sa sortie colorée? Je ne vois pas l'intérêt de cela, mais évidemment les développeurs le peuvent. Il s'agit d'un code de terminal ANSI / VT100 qui est utilisé pour "Effacer la ligne de la position actuelle du curseur jusqu'à la fin de la ligne" .

Dans un cas marginal, grep peut faire disparaître le texte de l'affichage du terminal. Par exemple:

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

L' écho simple affiche :,cb mais l' affichage colorisé montre:c

Le texte codé sous-jacent est: echo -e 'ab\r\033[01;31m\033[Kc\033[m\033[K' Cependant, sans les \e[Kcodes, echo -e 'ab\r\033[01;31mc\033[m'fonctionne comme prévu!

Quelle est la raison pour laquelle grep a inclus ces \e[Kcodes. J'écris un script pour la superposition d'un second passage de colorisation , comme dans: c=--color=always; ls $c /bin/gzip | grep $c 'z'. j'ai donc besoin de comprendre pourquoi grep utilise \e[K.

Peter.O
la source

Réponses:

11

Vous pouvez modifier ce comportement en définissant la GREP_COLORSvariable d'environnement:

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

Depuis la greppage de manuel:

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

Cela est fait en premier lieu pour définir l'arrière-plan du reste de la ligne sur la bonne couleur, au cas où cela aurait été changé plus tôt (bien que par défaut ce ne soit pas; quelqu'un pourrait le configurer pour le faire dans ses propres paramètres).

Vous pouvez également vouloir jouer avec les autres options qui peuvent être configurées GREP_COLORS; voir la page de manuel pour plus de détails.

Michael Hampton
la source