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 工具,但它是常用的。

相關內容