\e[K
grep이 컬러 출력에 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[K
grep에 이러한 코드가 포함된 이유는 무엇입니까? 재정의를 허용하는 스크립트를 작성 중입니다.두 번째 채색,좋다: 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
. 자세한 내용은 매뉴얼 페이지를 참조하세요.