行内の差異のみを表示する diff

行内の差異のみを表示する diff

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

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

.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 シェル ツールなど、より一般的に利用できるものを使用することを好みます。

答え1

使用差分:

$ 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-inputgit

git diff somefile | wdiff -d -3

wdiffPOSIX ツールではありませんが、一般的に利用可能です。

関連情報