grep 입력으로 색상 코드를 유지하려면 어떻게해야합니까? 두 개의 연속

두 개의 연속 grep명령을 사용하는 경우 예 :

echo "foo bar" | grep foo | grep bar

그런 다음 첫 번째 패턴 ( “foo”)이 강조 표시되지 않습니다. 실제로 grep은 입력에서 색상 코드를 제거하는 것으로 보입니다. 이것을 막을 방법이 있습니까?



답변

사용하십시오 --color=always.

grep출력이 파이프 (또는 파일)에 있는지 감지합니다. 출력은 파일로 출력 될 때 색상을 원하지 않습니다. 즉, 터미널의 이스케이프 시퀀스입니다. 일반적으로

foo ^[[01;31m^[[Kbar^[[m^[[K

예를 들어 :

grep pattern file > result

재정의하려면을 사용하십시오 --color=always.

grep --color=always pattern file | ...

예:

파일 있음 :

ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz

그때

grep --color=always ID file | grep --color=always 2013 | grep foo

색상 것 ID, 2013하고 foo.

grep --color=always ID file | grep 2013 | grep foo

색상 것 ID하고 foo있지만 2013.

1 중요 : 또한색상에서 추가 된 혼란 이 체인의 다음 명령으로 전달됨을기억해야합니다. ID에 색상이 지정되면 (쉽게) 일치 할 수 없습니다 (예 🙂ID=111.


경우에 따라 파일에서 터미널 색상 원할 수도 있습니다 . 예를 들어보십시오

 grep --color=always foo file > result
 cat result

결과 파일은 이식성이 매우 제한적입니다.


착색 자체도 확장입니다.


good @slm 에서 언급했듯이 다음을 추가 할 수 있습니다.

export GREP_OPTIONS="--color=always"

당신에 .bashrc등, 하지만하지 않습니다 당신이하지 않는 몇 가지 이유가 정말로 의미를 이해하고 아직도하고 싶은 위해. 그것은 grep위에서 언급 한 사실 때문에 여러 가지면에서 깨질 것입니다 1 .

alias자주 사용 하는 경우 추가하십시오 .

 alias cgrep='grep --color=always'

GREP_OPTIONS그리고 --color 세 가지 옵션을 : never, autoalways. 두 개의 첫 번째 만이 고려되어야합니다 GREP_OPTIONS.

또한 체크 아웃 할 수 GREP_COLORS에서 man페이지 또는에서 의 GNU 그렙 .