grep --color에 ANSI 코드 ESC 추가 [K-표시된 텍스트를 변경할 수 있음


9

grep \e[K이 컬러 출력에 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'예상대로 작동합니다!

grep이 이러한 \e[K코드를 포함시킨 이유는 무엇입니까? 나는의 오버레이를 허용하는 스크립트를 쓰고 있어요 초 컬러화 패스 같이 : c=--color=always; ls $c /bin/gzip | grep $c 'z'. 그래서 할 필요가 이해 왜 GREP 사용을 \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; 자세한 내용은 매뉴얼 페이지를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.