grep - color fügt ANSI-Code ESC hinzu [K - Dies kann den angezeigten Text ändern

9

Warum fügt grep \e[Kseiner farbigen Ausgabe ANSI-Code hinzu ? Ich kann den Sinn nicht erkennen, aber offensichtlich können es die Entwickler. Es handelt sich um einen ANSI / VT100-Terminalcode, mit dem "Zeile von der aktuellen Cursorposition bis zum Zeilenende löschen" verwendet wird .

In einem Randfall kann grep dazu führen, dass Text von der Terminalanzeige "verschwindet". Zum Beispiel:

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

Das einfache Echo zeigt an :,cb aber das farbige Display zeigt:c

Der zugrunde liegende codierte Text lautet: Funktioniert echo -e 'ab\r\033[01;31m\033[Kc\033[m\033[K' jedoch ohne die \e[KCodes echo -e 'ab\r\033[01;31mc\033[m'wie erwartet!

Was ist der Grund für die Aufnahme dieser \e[KCodes durch grep? Ich schreibe ein Skript, um das Überlagern eines zweiten Kolorierungsdurchlaufs zu ermöglichen , wie in : c=--color=always; ls $c /bin/gzip | grep $c 'z'. Ich muss also verstehen, warum grep verwendet \e[K.

Peter.O
quelle

Antworten:

11

Sie können dieses Verhalten ändern, indem Sie die GREP_COLORSUmgebungsvariable festlegen:

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

Von der grepManpage:

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

Dies geschieht in erster Linie, um den Hintergrund der restlichen Linie auf die richtige Farbe einzustellen, falls sie früher geändert wurde (obwohl dies standardmäßig nicht der Fall ist; jemand könnte dies in seinen eigenen Einstellungen einrichten).

Möglicherweise möchten Sie auch mit den anderen Optionen spielen, die eingestellt werden können GREP_COLORS. Weitere Informationen finden Sie auf der Manpage.

Michael Hampton
quelle