grep --color додає код ANSI ESC [K - Це може змінити відображений текст


9

Чому grep додає ANSI-код \e[Kу кольоровий вихід? Я не бачу сенсу цього, але очевидно, що розробники можуть. Це термінальний код ANSI / VT100, який використовується для "Очистити лінію від поточного положення курсору до кінця рядка" .

У випадку з бахромою grep може призвести до того, що текст "зникне" з дисплея терміналу. Наприклад:

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

Простий ехо- дисплей:, cbале кольоровий дисплей показує:c

Основний закодований текст: echo -e 'ab\r\033[01;31m\033[Kc\033[m\033[K' Однак, без \e[Kкодів, echo -e 'ab\r\033[01;31mc\033[m'працює, як очікувалося!

У чому причина включення грепів у ці \e[Kкоди. Я пишу сценарій , щоб для перекладки з другого фарбувального проходу , як в: c=--color=always; ls $c /bin/gzip | grep $c 'z'. тому мені потрібно зрозуміти, чому використовується греп \e[K.

Відповіді:


11

Ви можете змінити цю поведінку, встановивши GREP_COLORSзмінну середовища:

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

На grepчоловіковій сторінці:

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

Це робиться в першу чергу, щоб встановити фон решти рядка на потрібний колір, якщо він був змінений раніше (хоча за замовчуванням це не так; хтось може встановити це так, щоб це зробити у власних налаштуваннях).

Ви також можете пограти з іншими параметрами, які можна встановити GREP_COLORS; див. сторінку чоловіка для отримання повної інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.