我想比较两个文件中的行,但为了最大限度地减少输出中的噪音,我只想打印行中的实际差异。
例如,给出以下两个文件:
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+}
======================================================================
-3
or选项---no-common
将删除两个文件之间常见的单词并仅显示差异。
横幅===...
(和空行)可以通过以下方式删除grep
:
$ wdiff -3 a.txt b.txt | grep -vx '=*'
[-b-] {+B+}
wdiff
diff
如果您给它-d
或选项,也可以读取统一数据--diff-input
,例如来自git
:
git diff somefile | wdiff -d -3
虽然wdiff
不是 POSIX 工具,但它是常用的。