web-dev-qa-db-ja.com

行内の違いのみを示す差分

2つのファイルの行を比較したいのですが、出力のノイズを最小限に抑えるために、実際の行の違いだけを印刷します。

たとえば、次の2つのファイルがあるとします。

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シェルツール。

9
anol

wdiff の使用:

$ wdiff -3 a.txt b.txt

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

-3または---no-commonオプションは、2つのファイルに共通する単語を削除し、違いのみを表示します。

===...バナー(および空行)は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ツールではありませんが、一般的に利用可能です。

14
Kusalananda