シェルスクリプトを使用してLinuxで "diff"コマンドを使用して文字レベルの違いを取得するには?

シェルスクリプトを使用してLinuxで "diff"コマンドを使用して文字レベルの違いを取得するには?

2つのSQLファイルがあり、そのうちの1つold.sqlnew.sql

old.sqlEmp_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など)のみが必要です。

答え1

の短い答えここ:

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

そしてここ:

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

答え2

あなたは見つけることができますwdiffこのタイプの比較に役立ちます。逐語比較を生成するフロントエンドですdiff。あなたの例に基づいてデフォルトで作成されます。

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

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

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

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

答え3

あなたはそれを使用することができます:

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

スクリーンショット

colordiffはUbuntuソフトウェアパッケージです。を使用してインストールできますsudo apt-get install colordiff

diff-hightgitで(バージョン2.9から)。位置しています/usr/share/doc/git/contrib/diff-highlight/diff-highlight。あなたはあなたとどこかにそれを置くことができます$PATH。またはとても素敵なプロジェクト

答え4

私も私の文章を書いた独自のスクリプトこの問題を解決するには、次の方法を使用します。最も長い共通部分修飾アルゴリズム

これが実行される方法です

JLDiff.py a.txt b.txt out.html

結果は赤と緑の色のHTMLです。大きなファイルは処理に時間がかかりますが、これを行うと、1行ずつ最初に確認する必要なく、真の文字による比較が行われます。

この回答は以下でクロスポストされました。ここ

JLDiffがpypyではるかに速く実行されることがわかりました。

関連情報