diff 仅显示行内差异

diff 仅显示行内差异

我想比较两个文件中的行,但为了最大限度地减少输出中的噪音,我只想打印行中的实际差异。

例如,给出以下两个文件:

a.txt

a b c d e f g h i j k l m n o p q r s t u v w x y z

b.txt

a B c d e f g h i j k l m n o p q r s t u v w x y z

(它们之间的区别是字母的大小写b

我希望输出是这样的:

[-b-]{+B+}

目前,我发现的最好方法是使用git diff --word-diff,但它输出整行:

a [-b-]{+B+} c d e f g h i j k l m n o p q r s t u v w x y z

除了手动解析输出之外,还有更直接的方法吗?另外,理想情况下,我更愿意使用比 更常用的东西git diff,例如不需要用户安装额外软件包的 POSIX shell 工具。

答案1

使用差异:

$ wdiff -3 a.txt b.txt

======================================================================
 [-b-] {+B+}
======================================================================

-3or选项---no-common将删除两个文件之间常见的单词并仅显示差异。

横幅===...(和空行)可以通过以下方式删除grep

$ wdiff -3 a.txt b.txt | grep -vx '=*'
 [-b-] {+B+}

wdiffdiff如果您给它-d或选项,也可以读取统一数据--diff-input,例如来自git

git diff somefile | wdiff -d -3

虽然wdiff不是 POSIX 工具,但它是常用的。

相关内容