라인 내부의 차이점만 보여주는 diff

라인 내부의 차이점만 보여주는 diff

두 파일의 줄을 비교하고 싶지만 출력의 노이즈를 최소화하기 위해 줄의 실제 차이점만 인쇄하고 싶습니다.

예를 들어 아래 두 파일이 있다고 가정해 보겠습니다.

a.txt

a b c d e f g h i j k l m n o p q r s t u v w x y z

b.txt

a B c d e f g h i j k l m n o p q r s t u v w x y z

(그들 사이의 차이점은 문자의 경우입니다 b)

나는 출력이 다음과 같기를 원합니다.

[-b-]{+B+}

현재 내가 찾은 가장 좋은 접근 방식은 을 사용하는 것이었지만 git diff --word-diff전체 줄을 출력합니다.

a [-b-]{+B+} c d e f g h i j k l m n o p q r s t u v w x y z

출력을 수동으로 구문 분석하는 것 외에 더 직접적인 방법이 있습니까? 또한 이상적으로는 git diff사용자가 추가 패키지를 설치할 필요가 없는 POSIX 셸 도구와 같이 보다 일반적으로 사용 가능한 도구를 사용하는 것을 선호합니다 .

답변1

사용wdiff:

$ wdiff -3 a.txt b.txt

======================================================================
 [-b-] {+B+}
======================================================================

-3or 옵션 은 ---no-common두 파일 사이에 공통적인 단어를 제거하고 차이점만 표시합니다.

배너 ===...(및 빈 줄)는 다음을 사용하여 제거할 수 있습니다 grep.

$ wdiff -3 a.txt b.txt | grep -vx '=*'
 [-b-] {+B+}

wdiff예를 들어 다음과 같이 or 옵션을 diff제공하면 통합 데이터를 읽을 수도 있습니다 .-d--diff-inputgit

git diff somefile | wdiff -d -3

wdiffPOSIX 도구는 아니지만 일반적으로 사용할 수 있습니다 .

관련 정보