web-dev-qa-db-ja.com

シェルスクリプトを使用してLinuxで「diff」コマンドを使用して文字レベルの違いを取得する方法

2つのSQLファイルがあり、1つはold.sqlともう1つはnew.sql

と仮定しますold.sqlには、Emp_Id、Name、Addressの3つのフィールドと、old.sqlに次のように格納されたデータを含むテーブルが含まれています。

Insert into table1 values (101 ,"a", "xyz");
Insert into table1 values (102 ,"b", "pqr");

次に、「a」アドレス「xyz」を「xyz123」に変更し、そのデータをnew.sqlファイル。今new.sqlファイルには、次のようなデータが含まれています。

Insert into table1 values (101 ,"a", "xyz123");
Insert into table1 values (102 ,"b", "pqr");

次のようにdiffコマンドを使用すると:

diff old.sql new.sql

行ごとに違いが出ますが、xyz123のように、更新されたデータのみが必要です。

4
user168519

wdiff は、このタイプの比較に役立ちます。これは、単語ごとの比較を行うdiffのフロントエンドです。あなたの例では、デフォルトで生成されます

Insert into table1 values (101 ,"a", [-"xyz");-] {+"xyz123");+}
Insert into table1 values (102 ,"b", "pqr");

端末機能を使用して、出力を端末で読みやすくすることができます(wdiff -t)。また、出力を変更された単語のみに制限する-3オプションもあります。

======================================================================
 [-"xyz");-] {+"xyz123");+}
======================================================================

Wdiffをまだインストールしていない場合は、インストールする必要があります。 Sudo apt-get install wdiffまたはSudo dnf install wdiffまたはSudo yum install wdiffまたはオペレーティングシステムに適したコマンドを実行します。

6
Stephen Kitt

以下を使用できます。

diff -u old.sql new.sql |colordiff |diff-highlight

screenshot

colordiffはUbuntuパッケージです。 Sudo apt-get install colordiffを使用してインストールできます。

diff-hightはgitからのものです(バージョン2.9以降)。 /usr/share/doc/git/contrib/diff-highlight/diff-highlightにあります。 $PATHのどこかに置くことができます。または diff-so-fancy project から取得します。

4
zhanxw

定義により、diffは行ごとに差分を表示します(diffのマニュアルページを参照)。したがって、異なる文字だけが表示されるわけではありません。たとえば、各セミカラムの後に行末文字を挿入することにより、ファイルを前処理することにより、差異の量を減らすことができます。

sed -e 's/;/;\'$'\n/g' old.sql > old.patched

次に、2つの結果ファイルでdiffを使用します。

2
PierreL

ここ からの短い回答:

git diff --Word-diff=color --Word-diff-regex=. file1 file2

そして ここ

diff -u file1 file2 |Perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight

0
Cees Timmerman