파일의 단어만 비교

파일의 단어만 비교

비교해야 할 두 개의 파일이 있습니다.

문제는 들여쓰기와 개행의 형식이 다르기 때문에 diff file1 file2두 파일의 전체 출력만 반환된다는 것입니다.

실제 텍스트를 제외한 모든 것을 무시하는 방법이 있습니까?

답변1

diff -w모든 가로 공백 변경 사항을 무시합니다. 이는 들여쓰기를 처리하지만 줄이 다른 너비로 줄 바꿈되었거나 텍스트가 변경된 후 줄이 줄 바꿈된 경우에는 도움이 되지 않습니다.

텍스트 형식에 따라 비교 출력을 사용할 fmt수도 있고 사용하지 못할 수도 있습니다.

diff -u --label=file1 <(fmt file1) --label=file2 <(fmt file2)

설치가 가능한 경우차이점, 이 문서의 전체 목적은 귀하가 직면한 문제를 해결하는 것입니다. EPEL에서 구매 가능합니다.

Git에는 이 기능이 내장되어 있습니다. Git 리포지토리 외부에서도 작동합니다.

git diff --word-diff file1 file2

답변2

wdiff("단어 차이")를 사용할 수 있습니다 :

$ cat file1
this is file 1, it is
two lines long
$ cat file2
this is file 2,
it is
three lines long
$ wdiff file1 file2
this is file [-1,-] {+2,+}
it is
[-two-]
{+three+} lines long
$ wdiff --no-common file1 file2

======================================================================
 [-1,-] {+2,+}
======================================================================

[-two-]
{+three+}
======================================================================`

답변3

시도해 볼 수 있습니다 meld. 상당히 강력한(비록 그래픽임에도 불구하고) 파일 비교 도구이며 CentOS에서 사용할 수 있습니다.

답변4

Diff에는 몇 가지 옵션이 있습니다:

   -i, --ignore-case
          ignore case differences in file contents

   -E, --ignore-tab-expansion
          ignore changes due to tab expansion

   -Z, --ignore-trailing-space
          ignore white space at line end

   -b, --ignore-space-change
          ignore changes in the amount of white space

   -w, --ignore-all-space
          ignore all white space

   -B, --ignore-blank-lines
          ignore changes whose lines are all blank

   --strip-trailing-cr
          strip trailing carriage return on input

단어가 실제로 줄 사이를 이동하는 경우 각 입력 파일을 단어 스트림으로 줄이고 비교할 수 있습니다. 그러나 이는 이 단어가 어디서 왔는지에 대한 많은 맥락을 잃습니다. 이는 단어를 "영숫자 문자열"로 표시하고 단어 수준에서 순차적으로 비교합니다.

diff <( tr -cs [:alnum:] '\n' < file1 ) <( tr -cs [:alnum:] '\n' < file2 )

관련 정보