diffはインラインの違いのみを表示します。

diffはインラインの違いのみを表示します。

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

たとえば、次の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シェルツールよりも一般的なものを使用することをお勧めします。

答え1

使用違い:

$ wdiff -3 a.txt b.txt

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

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

バナー===...(および空白行)は次の方法で削除できますgrep

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

wdiffdifforオプションを指定すると、-d一様なデータを読み取ることもできます--diff-input。例git:

git diff somefile | wdiff -d -3

POSIXツールではありませんが、wdiff一般的に使用されます。

関連情報