Shell-Script

diff 僅顯示行內的差異

  • March 11, 2022

我想比較兩個文件中的行,但為了盡量減少輸出中的噪音,我只想列印行中的實際差異。

例如,給定以下兩個文件:

一個.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 工具。

使用wdiff

$ wdiff -3 a.txt b.txt

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

-3or---no-common選項將刪除兩個文件之間共有的單詞,只顯示不同之處。

===...可以使用以下命令刪除橫幅(和空行)grep

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

wdiff``diff如果您給它-dor選項,也可以讀取統一數據--diff-input,例如從git

git diff somefile | wdiff -d -3

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

引用自:https://unix.stackexchange.com/questions/495228