비교해야 할 두 개의 파일이 있습니다.
문제는 들여쓰기와 개행의 형식이 다르기 때문에 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 )