Shell-Script
diff 僅顯示行內的差異
我想比較兩個文件中的行,但為了盡量減少輸出中的噪音,我只想列印行中的實際差異。
例如,給定以下兩個文件:
一個.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+} ======================================================================
-3
or---no-common
選項將刪除兩個文件之間共有的單詞,只顯示不同之處。
===...
可以使用以下命令刪除橫幅(和空行)grep
:$ wdiff -3 a.txt b.txt | grep -vx '=*' [-b-] {+B+}
wdiff``diff
如果您給它-d
or選項,也可以讀取統一數據--diff-input
,例如從git
:git diff somefile | wdiff -d -3
雖然
wdiff
不是 POSIX 工具,但它是常用的。