我有两个文件需要比较。
问题是,缩进和换行符具有不同的格式,因此仅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 )