如何使用 diff -y 使文本换行?

如何使用 diff -y 使文本换行?

当我用来diff -y比较两个具有长行文本的文本文件时,结果会截断每一列,并且我无法读取整行。我希望文本能够换行(或折叠,也称为折叠),以便我可以阅读整行。

例如,假设我有两个简单的文本文件,每行一行:

cat tmp.txt tmp2.txt
The quick brown fox jumped over the lazy dog. This line is very long and will not show when I use a diff. 
The quick brown fox did not jump over the lazy dog. This line is very long and will not show when I use a diff. 

diff我得到了他们,

diff -y tmp.txt tmp2.txt
The quick brown fox jumped over the lazy dog. This line is ve | The quick brown fox did not jump over the lazy dog. This line

这会切断中间的线。

我知道可以-W选择使其更宽,但线条比我的屏幕宽度长,所以这没有帮助。使用 simplediff确实会使文本换行,但使用diff -y.

那么如何使用diff -y文字换行呢?

我正在 Mac 上使用终端,如果有帮助的话。

这似乎是一个简单的事情,但在到处搜索后我找不到解决方案!

答案1

如果丢失行号信息是可以的,并且您只是对视觉差异感兴趣,那么您可以fold先对文件进行比较,然后再进行比较。

diff -y <(fold -s -w72 file1) <(fold -s -w72 file2) -W 200

在此命令中,我们使用进程替换首先将每个文件折叠为 72 个字符的行,但使用-s选项我们确保仅在空格字符处断开行。

一旦行被折叠换行, diff 命令将在换行的输出上工作。

编辑:指定 -W 来比较 diff 的值大于折叠中给定的值将确保 diff 和折叠有足够的空间相互配合。在这种情况下 -W 200 被赋予 diff

答案2

我喜欢用它icdiff来完成这个任务。

运行后截图 icdiff tmp.txt tmp1.txt

icdiff 输出

答案3

Kdiff3有一个设置Diffview > Word Wrap Diff Windows可以在框架中最接近的单词边界处换行。这是我发现的唯一可以做到这一点的工具。

kdiff3 用自动换行显示两个文本的差异

相关内容