다음과 같은 두 개의 연속 명령을 사용하는 경우 grep
:
echo "foo bar" | grep foo | grep bar
그러면 첫 번째 패턴("foo")이 강조 표시되지 않습니다. 실제로 grep은 입력에서 색상 코드를 제거하는 것 같습니다. 이런 일이 발생하지 않도록 하는 방법이 있나요?
답변1
사용 --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
결과 파일은 이식성이 매우 제한되어 있습니다.
색칠하는 것 자체도 무리입니다.
좋은 사람들 말대로@slm, 다음을 추가할 수 있습니다.
export GREP_OPTIONS="--color=always"
당신을 .bashrc
기다려요하지만 하지마어떤 이유로든 그 의미를 정말로 이해하고 여전히 그렇게 하고 싶어하지 않는 한. 위의 사실 1grep
로 인해 여러 가지 방법으로 문제가 발생할 수 있습니다 .
alias
정기적으로 사용하는 경우 하나를 추가하십시오.
alias cgrep='grep --color=always'
GREP_OPTIONS
그리고--color
세 가지 옵션을 선택하세요: never
, auto
그리고 always
. 처음 두 개만 고려되어야 합니다 GREP_OPTIONS
.
GREP_COLORS
man
페이지나 아래에서도 보실 수 있습니다그누 그렙.