컬러 diff 출력을 적게 줄이려면 어떻게합니까?


34

git diff를 사용하여 컬러 출력을 생성했습니다. 그러나 이제는 보통 diff를 사용해야하며 색상 부족으로 인해 읽기 어려운 많은 출력을 생성합니다. diff로 읽을 수 있고 색상이 지정된 출력물을 만들려면 어떻게해야합니까? 큰 파일을 쉽게 검토 할 수 있도록 파이핑을 적게하는 것이 이상적입니다.

답변:


31

diff색상을 출력 할 수 없으면 다른 프로그램이 필요 colordiff합니다. 터미널의 색상은 ANSI 이스케이프 코드 를 통해 인쇄 되며 기본적으로 덜 해석됩니다. less색상을 올바르게 표시 하려면 -r, 또는 더 나은 -R스위치 가 필요합니다 .

colordiff -- "$file1" "$file2" | less -R

보낸 사람 man less:

   -R or --RAW-CONTROL-CHARS
          Like -r, but only ANSI  "color"  escape  sequences  are
          output in "raw" form.  Unlike -r, the screen appearance
          is maintained correctly in most  cases.   ANSI  "color"
          escape sequences are sequences of the form:

               ESC [ ... m

          where  the  "..."  is  zero or more color specification
          characters For the purpose of keeping track  of  screen
          appearance,  ANSI color escape sequences are assumed to
          not move the cursor.  You  can  make  less  think  that
          characters  other  than  "m"  can end ANSI color escape
          sequences by setting the environment  variable  LESSAN‐
          SIENDCHARS  to  the  list of characters which can end a
          color escape sequence.  And you  can  make  less  think
          that characters other than the standard ones may appear
          between the ESC and the m by  setting  the  environment
          variable  LESSANSIMIDCHARS  to  the  list of characters
          which can appear.

또는 more기본적으로 색상을 올바르게 표시하는을 사용할 수 있습니다 .


외부 프로그램을 설치할 수없는 경우보다 수동적 인 접근 방식을 사용하여 동일한 출력을 얻을 수 있어야합니다.

diff a b | 
   perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"} 
              elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'

1
그리고 누군가가 표시되는 데이터의 백분율을 보려면, superuser.com/questions/64972/… 를 사용해야합니다 less -RM +Gg.
baptx

11

여기에 다른 답변이 오래되었을 수 있습니다. coreutils 3.5부터는 diffstdout이 콘솔이 아닌 경우 기본적으로 꺼져있는 컬러 출력을 생성 할 수 있습니다.

매뉴얼 페이지에서 :

--color[=WHEN]
출력물을 채색하십시오. WHEN할 수있다 never, always또는 auto(기본)

stdout이 파이프 diff --color=always -- "$file1" "$file2" | less -R일 때 컬러 출력을 강제하려면 작동해야합니다.


당신은 또한 포함 할 수 alias diff='diff --color=always'A의 .bashrc또는 .zshrc파일을.
jftuga

1
예. 내가 사용하는alias diff='diff --side-by-side --left-column --color=always'
Kshitiz Sharma

내가 사용 alias diff='/usr/bin/diff --color=always '하고 alias less='/usr/bin/less -r '있지만, DIFF가 처음 이하의 처음 몇 페이지에 있지만 긴 차이점에 색깔 있지만 때로는 모노로 다시 뒤집습니다. diff에 영향을 미치지 않는 점프에있을 수 있습니다. 출력은 한 번만 생성되고 점프 할 필요가 없지만 색상 추적을 덜 잃습니다.
NeilG

8

채색 된 diff를 덜 파이프하려면 :

diff $file1 $file2 | colordiff | less -r

단일 화면으로 제한하여 더 읽기 쉽게하려면 :

diff -uw $file1 $file2 | colordiff | less -r

그리고 화면에 가치가있는 화면이 하나 뿐인 경우 표시되지 않도록하려면 :

diff -uw $file1 $file2 | tee /dev/stderr | colordiff | less -r -F

-F는 내용이 걱정되는 화면이 두 개 미만인 경우 즉시 닫히지 않습니다. stderr로 파이프는 닫을 때 출력을 잃을 때-stderr로 파이프하여 표시하지 않아도 출력을 얻습니다.

대안 (그리고 더 나은 생각) 방법은 화면을 덜 지우는 것을 막기 위해 -X를 사용하는 것입니다.

diff -uw $file1 $file2 | colordiff | less -r -X -F

이것은 나에게 잘 작동하지만 bash에만 해당 될 수 있습니다. colordiff는 내장되어 있지 않지만 쉽게 설치할 수 있습니다.


2
그가 필요한 유일한 명령은 다음과 같습니다less -r
sendmoreinfo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.