アンドロイド

LinuxのDiffコマンド

George Hotz | Programming | From the Transistor: Exploring Xilinx on MAC ( O S A K A ) | Part1

George Hotz | Programming | From the Transistor: Exploring Xilinx on MAC ( O S A K A ) | Part1

目次:

Anonim

diff は、2つのファイルを行ごとに比較できるコマンドラインユーティリティです。 また、ディレクトリの内容を比較することもできます。

diff コマンドは、 patch コマンドを使用して適用できる1つ以上のファイル間の差分を含むパッチを作成するために最も一般的に使用されます。

diff コマンドの使用方法

diff コマンドの構文は次のとおりです。

diff… FILES

diff コマンドは、いくつかの形式で出力を表示できます。最も一般的な形式は、標準形式、コンテキスト形式、統一形式です。 出力には、ファイル内のどの行を変更して同一にするかに関する情報が含まれます。 ファイルが一致する場合、出力は生成されません。

コマンド出力をファイルに保存するには、リダイレクト演算子を使用します。

diff file1 file2 > patch

、次の2つのファイルを使用して、 diff コマンドの動作を説明します。

file1

Ubuntu Arch Linux Debian CentOS Fedora file2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

通常フォーマット

オプションを使用せずに2つのテキストファイルに対して diff コマンドを実行する最も単純な形式では、通常の形式で出力が生成されます。

diff file1 file2

出力は次のようになります。

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

通常の出力形式は、違いを説明する1つ以上のセクションで構成されます。 各セクションは次のようになります。

change-command < from-file-line… --- > to-file-line…

0a1 、および 4c4, 5 は変更コマンドです。 各変更コマンドには、左から右に次のものが含まれます。

  • 最初のファイルの行番号または行の範囲。特別な変更文字。2番目のファイルの行番号または行の範囲。

変更文字は次のいずれかです。

  • a-行を追加します。 c 行を変更します。 d 行を削除します。

変更コマンドの後には、削除された完全な行( < )が続き、ファイルに追加されます( > )。

出力を説明しましょう:

  • 0a1 -file1の先頭(行 0 後)に2番目のファイルの行 1 を追加します。
    • > Kubuntu 上記のように最初のファイルに追加される2番目の行の行。
    2d2 最初のファイルの 2 行目を削除します。 d 記号の後の 2 は、行が削除されない場合、2番目のファイルの行 2 に表示されることを意味します。
    • < Arch Linux 削除された行。
    4c4, 5 最初のファイルの 5 行目を2番目のファイルの 4-5 行目で置き換えます(変更します)。
    • < CentOS 置き換えられる最初のファイルの行。 --- セパレーター。 > Arch Linux および > Centos 最初のファイルの行を置き換える2番目のファイルの行。

コンテキスト形式

コンテキスト出力形式を使用すると、 diff コマンドは、ファイル間で異なる行の前後にコンテキストの複数の行を表示します。

-c オプションは、 diff にコンテキスト形式で出力を生成するように指示します。

diff -c file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

出力は、比較されるファイルの場合は名前とタイムスタンプ、および相違点を説明する1つ以上のセクションで始まります。 各セクションは次のようになります。

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers および to-file-line-numbers -1番目と2番目のファイルの行番号またはコンマ区切りの行範囲。 from-file-line および to-file-line line-異なる行とコンテキストの行:
    • 2つのスペースで始まる行はコンテキストの行であり、両方のファイルで同じ行です。マイナス記号( - )で始まる行は、2番目のファイルの何にも対応しない行です。 2番目のファイルにない行。プラス記号( + )で始まる行は、最初のファイルの何にも対応しない行です。 最初のファイルにない行 ! 感嘆符( ! )で始まる行は、2つのファイル間で変更される行です。 ! 始まる行の各グループ 最初のファイルから、2番目のファイルに対応する一致があります。

出力の最も重要な部分を説明しましょう。

  • この例では、違いを説明するセクションが1つだけあります。 *** 1, 6 **** および --- 1, 7 ---- は、このセクションに含まれる最初と2番目のファイルの行の範囲を示しています。行 Ubuntu Debian Fedora 、および最後の空行は両方のファイルで同じです。 これらの行はダブルスペースで始まります。行 - Arch Linux 最初のファイルの - Arch Linux は、2番目のファイルの何にも対応しません。 この行は2番目のファイルにも存在しますが、位置が異なります。2番目のファイルのLine + Kubuntu は、最初のファイルの何にも対応しません ! CentOS 最初のファイルと行からの ! CentOS ! Arch Linux ! Arch Linux および ! CentOS 2番目のファイルの ! CentOS は、ファイル間で変更されます。

デフォルトでは、コンテキスト行の数はデフォルトで3になります。 別の番号を指定するには、 -C (-- --contexts )オプションを使用します。

diff -C 1 file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

統一フォーマット

統一された出力形式は、コンテキスト形式の改良版であり、出力が小さくなります。

-u オプションを使用して、 diff に統一形式で出力を印刷するように指示します。

diff -u file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora

出力は、ファイルの名前とタイムスタンプ、および相違点を説明する1つ以上のセクションで始まります。 各セクションの形式は次のとおりです。

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ -このセクションに含まれる最初と2番目のファイルの行番号または行の範囲。 line-from-files files-異なる行とコンテキストの行:
    • 2つのスペースで始まる行はコンテキストの行であり、両方のファイルで同じ行です。マイナス記号( - )で始まる行は最初のファイルから削除される行です。プラス記号( + )で始まる行は最初のファイルから追加される行。

ケースを無視

上記の例でわかるように、 diff コマンドはデフォルトで大文字と小文字を区別します。

-i オプションを使用して、大文字小文字を無視するように diff に指示します。

diff -ui file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora

結論

テキストファイルの違いを比較することは、Linuxシステム管理者にとって最も一般的なタスクの1つです。

diff コマンドは、ファイルを行 diff 比較します。 詳細については、ターミナルで man diff してください。

diff端子