Unix 파일을 조건부로 형식화하고 싶습니다. 현재 명령 작업을 수행 중이며 명령으로 텍스트 출력 diff
형식을 지정할 수 있는지 알고 싶습니다 .diff
예:
일치하는 값은 녹색으로 표시되어야 합니다.
일치하지 않는 값은 빨간색으로 표시되어야 합니다.
file1
두 개의 파일 이 있고 file2
내 명령은 diff file1 file2
.
이제 출력에 5개의 불일치가 포함되어 있다고 가정하고 이러한 불일치는 빨간색으로 표시되어야 합니다. 유닉스를 사용하여 이를 달성하는 방법은 무엇입니까?
즉, "일치하지 않는 값의 경우 diff 명령의 출력 색상을 빨간색으로 변경합니다"
답변1
diff --color
옵션이 추가되었습니다GNU 차이점 3.4 (2016-08-08)
이는 대부분의 배포판에서 기본 구현으로 diff
, 곧 제공될 것입니다.
Ubuntu 18.04에는 diffutils
3.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
관련 주제:
- https://stackoverflow.com/questions/1721738/using-diff-or-anything-else-to-get-character-level-diff-Between-text-files
- 라인 내 차이
- https://superuser.com/questions/496415/using-diff-on-a-long-one-line-file
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
힘내 통합
ydiff
Git과 통합되어 구성이 필요하지 않습니다.
대신 git 저장소 내부에서 git diff
다음을 수행할 수 있습니다.
ydiff -s
대신에 git log
:
ydiff -ls
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
)