색상 차이를 출력하는 방법은 무엇입니까?

색상 차이를 출력하는 방법은 무엇입니까?

Unix 파일을 조건부로 형식화하고 싶습니다. 현재 명령 작업을 수행 중이며 명령으로 텍스트 출력 diff형식을 지정할 수 있는지 알고 싶습니다 .diff

예:

일치하는 값은 녹색으로 표시되어야 합니다.
일치하지 않는 값은 빨간색으로 표시되어야 합니다.

file1두 개의 파일 이 있고 file2내 명령은 diff file1 file2.

이제 출력에 5개의 불일치가 포함되어 있다고 가정하고 이러한 불일치는 빨간색으로 표시되어야 합니다. 유닉스를 사용하여 이를 달성하는 방법은 무엇입니까?

즉, "일치하지 않는 값의 경우 diff 명령의 출력 색상을 빨간색으로 변경합니다"

답변1

diff --color옵션이 추가되었습니다GNU 차이점 3.4 (2016-08-08)

이는 대부분의 배포판에서 기본 구현으로 diff, 곧 제공될 것입니다.

Ubuntu 18.04에는 diffutils3.6이 있으므로 그것도 있습니다.

3.5에서는 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

시험:

diff --color -u \
  <(seq 6 | sed 's/$/ a/') \
  <(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')

커밋 c0fa19fe92da71404f809aafb5f51cfd99b1bee2(2015년 3월)에 추가된 것 같습니다.

단어 수준의 차이

좋다 diff-highlight. 불가능한 것 같습니다. 기능 요청:https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html

관련 주제:

ydiff그러나 아래를 참조하십시오.

ydiff나란히 단어 수준의 차이

https://github.com/ymattw/ydiff

이것이 너바나인가?

python3 -m pip install --user ydiff
diff -u a b | ydiff -s

결과:

여기에 이미지 설명을 입력하세요.

행이 너무 좁은 경우(기본값 80열) 다음 명령을 사용하여 화면에 맞춥니다.

diff -u a b | ydiff -w 0 -s

테스트 파일 내용:

1
2
3
4
5 the original line the original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the original line
16
17
18
19
20

두번째

1
2
3
4
5 the original line teh original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the origlnal line
16
17
18
19
20

ydiff힘내 통합

ydiffGit과 통합되어 구성이 필요하지 않습니다.

대신 git 저장소 내부에서 git diff다음을 수행할 수 있습니다.

ydiff -s

대신에 git log:

ydiff -ls

또한보십시오:https://stackoverflow.com/questions/7669963/how-can-i-get-a-side-by-side-diff-when-i-do-git-diff/14649328#14649328

Ubuntu 16.04, git 2.18.0, ydiff 1.1에서 테스트되었습니다.

답변2

GNU에 접근할 수 있다면 diff이것을 사용할 수 있습니다--X-group-format옵션이 효과는 추가 도구 없이도 얻을 수 있습니다.

diff --old-group-format=$'\e[0;31m%<\e[0m' \
     --new-group-format=$'\e[0;31m%>\e[0m' \
     --unchanged-group-format=$'\e[0;32m%=\e[0m' \
     file1 file2

그 사용ANSI 색상 이스케이프 코드빨간색과 녹색을 얻으려면ANSI-C 인용문셸에서 \e이스케이프 문자에 액세스합니다.

--old-group-format그리고 --new-group-format와 를 사용하여 일치하지 않는 라인을 식별하여 빨간색과 컬러 재설정 코드 사이에 삽입 %<하고 녹색과 재설정 코드 사이에 일치하는 라인을 %>삽입 합니다.--unchanged-group-format

당신은 또한 수사용--old-line-format(등), 라인 당 중복 색상 이스케이프 비용: --old-line-format=$'\e[0;31m%L\e[0m'.

답변3

노력하다colordiff file1 file2

Linux/BSD 배포판에서 colordiff의 가용성

Debian 또는 Ubuntu(또는 그 파생물)를 실행하는 사용자는 간단히 "apt-get install colordiff"를 사용하여 다운로드하고 설치할 수 있습니다. colordiff는 다른 많은 Linux, UNIX 및 BSD 배포판 및 운영 체제용으로도 패키지되어 있습니다.

(에서 인용http://www.colordiff.org/)

답변4

색깔의,글꼴 수준 diff산출

다음 스크립트를 사용하여 수행할 수 있는 작업은 다음과 같습니다.차이점 강조:

색상 차이 스크린샷

#!/bin/sh -eu

# Use diff-highlight to show word-level differences

diff -U3 --minimal "$@" |
  sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' |
  diff-highlight

(크레딧@retracile의 답변강조 용 sed)

관련 정보