[linux] grep을 grep에 파이핑 한 후 색상 유지

grep’ing 후 ls 착색 유지에 비슷한 질문이 있지만 착색 grep 출력을 다른 grep에 파이프하면 착색이 유지되지 않는다는 것이 나에게 성가신 일입니다.

예를 들어 grep --color WORD * | grep -v AVOID첫 번째 출력의 색상을 유지하지 않습니다. 그러나 나를 ls | grep FILE위해 색을 유지하는 이유는 무엇입니까?



답변

grep예를 들어 파이프에 쓸 때 색상 출력이 비활성화됩니다. 이 동작을 재정의 할 수 있습니다grep --color=always

올바른 명령 줄은

grep --color=always WORD * | grep -v AVOID

이것은 매우 장황합니다. 대신 선을 추가 할 수 있습니다

alias cgrep="grep --color=always"

당신에 대한 .bashrc예와 사용 cgrep의 색칠 GREP있다. 재정의 grep할 때 특정 출력에 의존하고 grepASCII 이스케이프 코드를 좋아하지 않는 스크립트에 문제가 발생할 수 있습니다 .


답변

충고 한마디 :

를 사용할 때 grep --color=always다음 파이프로 전달되는 실제 문자열이 변경됩니다. 다음과 같은 상황이 발생할 수 있습니다.

$ grep --color=always -e '1' * | grep -ve '12'
11
12
13

옵션이 비록 -ve '12'중간 선을 제외해야합니다, 그것은 사이에 컬러 문자가 없기 때문에 1하고 2.


답변

파이프 끝에서 동일한 grep 명령을 반복하면됩니다.
grep WORD * | grep -v AVOID | grep -v AVOID2 | grep WORD


답변