16

有谁知道一个类似 diff 的工具,它可以向我显示两个文本文件之间的更改,但忽略空格中的更改,包括换行符

这是一个例子:

敏捷的棕狐跳过了懒熊。敏捷的棕色狐狸
跳过懒熊。敏捷的棕色狐狸跳过懒惰的
熊。敏捷的棕狐跳过了懒熊。
敏捷的棕狐跳过了懒熊。敏捷的棕色狐狸跳了起来
在懒熊之上。敏捷的棕狐跳过了懒熊。
敏捷的棕狐跳过了懒熊。

我所做的只是删除一个单词并重新排列它,但是“diff -b”检测到每一行的更改(应该如此;我并不是说这是 diff 中的错误)。但是对于大型 LaTeX 文件,这是一个主要问题;长段换一个字,得到的 diff 基本没用。

顺便说一句,我知道这需要比通常的行原子差异更多的计算能力。我只对人为生成的小文件执行此操作,如果需要,我很乐意等待很长时间。

4

2 回答 2

13

wdiff进行逐字对齐。

要在终端中显示易于阅读,请运行

 wdiff -al <file1> <file2> | less

这将显示(至少在我的系统上)粗体字的插入和带下划线的<file2>删除。<file2>

于 2010-04-09T03:22:20.027 回答
1

一种选择是通过将整个文件拆分为单词来做到这一点。不是 100% 相同的结果会导致对上下文的了解,但会根据您关心的更改类型进行微调。

例子 :

cat file1 | perl5.8 -e '{s/\s+/\n/g;}' > file1.split_words
cat file2 | perl5.8 -e '{s/\s+/\n/g;}' > file2.split_words
diff file1.split_words file2.split_words

如果文本具有特殊属性,您可以做得更好,更具体地说,重排仅在定义为连续 2 个换行符的段落范围内发生 - 只需将所有单个换行符替换为空格并定期运行diff -w结果.

于 2010-04-09T03:22:36.890 回答