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


9

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シェルツールなど、より一般的に利用可能なものを使用したいと思います。


違いがより見やすい例を使用するとよいでしょう。私はそれらの2つのキャラクターが同じではないことを確認するために目を細めなければなりませんでした。
Barmar

行の違いを説明するメモを追加しました。
アルコール

理由だけではなく、使用しないbと、Bそれは明らかですか?これはおそらく実際の違いだったと思いますが、質問の目的のために、もっと簡単にすることができます。
Barmar

1
ASCII文字でのみ機能するソリューションは避けたかったのですが、提案されたソリューションはそれに依存しないため、変更しました。ただし、編集は6文字未満になるため、新しい変更を反映するように回答を更新することはできません。
アルコール

回答:


14

wdiffの使用:

$ wdiff -3 a.txt b.txt

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

-3または---no-commonオプションの二つのファイル間で共通の単語を削除し、唯一の相違点を表示します。

===...バナー(空行)を用いて除去してもよいですgrep

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

wdiffまたはオプションdiffを指定すると、統合データを読み取ることもできます。-d--diff-inputgit

git diff somefile | wdiff -d -3

が、wdiffPOSIXツールではありません、それは一般的に入手可能です。


ターミナルがANSIエスケープをサポートしている場合、bashrc:(ここalias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"から取得)でこれを使用すると、(imo)読みやすいwdiff印刷の派手な色の出力を作成できることに注意してください。
scohe001
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.