programing

파이프 그렙에서 그렙까지 색상 유지

skycolor 2023. 5. 27. 10:00
반응형

파이프 그렙에서 그렙까지 색상 유지

그렙 후의 보존 색상에도 비슷한 질문이 있지만, 다른 그렙으로 색상이 지정된 그렙 출력을 파이프로 연결하면 색상이 보존되지 않는다는 것이 짜증납니다.

예를 들어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그리고 아스키 이스케이프 코드를 좋아하지 않습니다.

충고 한마디:

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

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

비록 그 옵션이-ve '12'중간 선을 제외해야 합니다. 중간 선 사이에 색상 문자가 있기 때문이 아닙니다.1그리고.2.

기존 답변은 FIRST 명령이 다음과 같은 경우에만 해당됩니다.grep(OP의 질문과 같이, 이 문제는 다른 상황에서도 발생합니다.)

보다 일반적인 답변

기본적인 문제는 BEFOR 명령이| grep는 출력이 파이프로 이동한다는 것을 인식할 때 색상을 비활성화하여 "스마트"해지려고 합니다.일반적으로 이것은 ANSI 이스케이프 코드가 다운스트림 프로그램을 방해하지 않도록 하기 위해 사용자가 원하는 것입니다.

그러나 이전 명령에서 색상이 지정된 출력을 생성하려면 출력 싱크에 관계없이 색상 코드를 생성해야 합니다.강제 메커니즘은 프로그램마다 다릅니다.

Git: -c color.status= always 사용

git -c color.status=always status | grep -v .DS_Store

참고: 더-c옵션은 하위 명령 앞에 와야 합니다.status.

다른이들

(이것은 커뮤니티 위키 게시물이니 자유롭게 추가하세요)

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

언급URL : https://stackoverflow.com/questions/2327191/preserve-colouring-after-piping-grep-to-grep

반응형