답변:
로 --color=auto
grep은 출력이 터미널에 직접 기록되고 해당 터미널이 컬러 출력을 표시 할 수있는 경우 일치하는 문자열을 강조 표시합니다.
일반적으로 --color=auto
원하는 것입니다. 예를 들어, grep을 사용하여 URL을 일치시키고 Wget으로 파이프하면 Wget은 \e[1;31mhttp://...
실제 URL 대신 표시 됩니다 (그리고 질식).
다음 명령은 컬러 출력이됩니다.
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
그러나이 명령은 다음과 같아서는 안됩니다.
echo Super User | grep --color=auto Super | cat
이 동작이 일치하지 않으면 버그로 간주해야합니다.
을 사용 --color=auto
하면 최신 Grep for Windows 버전 (2.5.4)과 원본 2.5.4를 기반으로하며 조건에 따라 출력 색상을 지정합니다.
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
즉, 출력이 터미널에 기록되는 경우에만 환경 변수TERM
가 정의되고 터미널은 dumb 이 아닙니다 .
TERM
일반적으로 정의되어 있지 않기 때문에 Windows에서 원하는 동작을 생성 하지 않습니다. 이 문제에 대한 쉬운 해결책은 TERM=windows
제어판에서 설정하는 것 입니다.
최신 버전의 grep (2.14)은 조건이있는 경우에만 출력을 색칠하여이 문제를 해결합니다.
isatty(STDOUT_FILENO) && should_colorize()
should_colorize()
POSIX 및 Win32에 대해 다르게 정의 된 위치는 true입니다 .
전자의 경우 조건은 2.5.4 중 하나와 같습니다. 후자의 경우 환경 변수 TERM
를 설정할 필요가 없습니다 (단지 할 수는 없습니다 dumb
).
sdgstd.h
, istty(stdout)
반환 0
출력을 파일로 리디렉션합니다.
grep
과 less
GnuWin 프로젝트에서 (gnuwin32.sourceforge.net). 유틸리티 cmd.exe
로 개선되었습니다 ansicon
. less --color=auto
예상대로 작동 : 리디렉션이 적용되지 않은 경우 색상을 사용하고 출력이 리디렉션 될 때는 색상을 사용하지 않습니다. 그러나 grep --color=auto
두 경우 모두 이스케이프 시퀀스를 인쇄하지 않습니다.