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


9

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

예를 들어, 아래 두 파일이 주어지면 :

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 셸 도구 보다 일반적으로 사용 가능한 것을 선호 합니다.


차이점이 더 잘 보이는 예를 사용하면 좋을 것입니다. 나는 그 두 캐릭터가 같지 않다는 것을 눈을 가렸다.
Barmar

죄송합니다. 줄의 차이점을 설명하는 메모를 추가했습니다.
anol

왜 그냥 사용하지 b하고 B그래서 그것은 분명? 나는 이것이 실제 차이 일 것임을 이해하지만, 질문의 목적을 위해 더 쉽게 만들 수 있습니다.
Barmar

1
ASCII 문자에서만 작동하는 솔루션을 피하고 싶었지만 제안 된 솔루션이 의존하지 않기 때문에 변경했습니다. 그러나 편집 내용이 6 자보다 작기 때문에 새 변경 사항을 반영하도록 답변을 업데이트 할 수 없습니다.
anol

답변:


14

wdiff 사용 :

$ wdiff -3 a.txt b.txt

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

-3또는 ---no-common옵션은 두 개의 파일 사이에 공통 만 차이를 보여 단어를 제거합니다.

===...배너 (빈 라인)을 제거 할 수 있습니다 grep:

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

wdiff또는 옵션 diff을 제공하면 통합 데이터를 읽을 수도 있습니다 .-d--diff-inputgit

git diff somefile | wdiff -d -3

하지만 wdiffPOSIX의 도구가 아닙니다, 그것은 일반적으로 사용할 수 있습니다.


: 그것은 당신의 터미널 지원 ANSI 이스케이프 경우, 당신은 이제 (IMO) 쉽게 bashrc에이 함께 읽을 것을 wdiff 인쇄 화려한 색 출력 할 수 있다는 지적 가치가있을 수도 있습니다 alias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"(에서 가져온 여기를 ).
scohe001
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.