grep --color ANSI 코드 ESC[K를 추가합니다 - 표시된 텍스트가 변경됩니다.

grep --color ANSI 코드 ESC[K를 추가합니다 - 표시된 텍스트가 변경됩니다.

\e[Kgrep이 컬러 출력에 ANSI 코드를 추가하는 이유는 무엇입니까 ? 나는 그것의 요점을 알지 못하지만 분명히 개발자는 할 수 있습니다. 이것은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[Kgrep에 이러한 코드가 포함된 이유는 무엇입니까? 재정의를 허용하는 스크립트를 작성 중입니다.두 번째 채색,좋다: c=--color=always; ls $c /bin/gzip | grep $c 'z'. 그래서 난 필요해이해하다grep이 \e[K.

답변1

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. 자세한 내용은 매뉴얼 페이지를 참조하세요.

관련 정보