
我想比較兩個文件中的行,但為了最大限度地減少輸出中的噪音,我只想列印行中的實際差異。
例如,給出以下兩個文件:
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 工具,但它是常用的。