学校の課題があります。このタスクの一部は、ファイルの変更を確認し、その変更をログファイルに記録することです。これまでdiff
役に立つと思われるコマンドを見つけました。次の内容を含む2つのファイルがあるとします。
ファイル1
orange
apple
ファイル2
orange
apple
strawberry
この場合、diff -c file1 file2
コマンドの出力は次のようになります。
*** file1 2016-11-24 08:31:19.424712242 +0100
--- file2 2016-11-24 08:25:24.604681751 +0100
***************
*** 1,2 ****
--- 1,3 ----
orange
apple
+ strawberry
私の考えでは、「+」記号のある行をfile1に追加しなければ同じ(?)にすることができるようです。
それでは、file1を次のように変更するとしましょう。
orange
apple
peach
出力はdiff -c file1 file2
次のとおりです
*** file1 2016-11-24 08:34:50.647128312 +0100
--- file2 2016-11-24 08:25:24.604681751 +0100
***************
*** 1,3 ****
orange
apple
! peach
--- 1,3 ----
orange
apple
! strawberry
この感嘆符が何を意味するのか理解していないので、ここで迷子になりました。突然diffコマンドはあまり役に立たないようです。 diffコマンドのマニュアルページを見ようとしましたが、何も見つかりませんでした(おそらく私が見たことがないかもしれません)。
答え1
diff -u
あなたの使命に必要なものかもしれません。
たとえば、次のようにしますdiff -u
。
michael@x071:[/home/michael]diff -u file?
--- file1 2016-11-24 07:48:41 +0000
+++ file2 2016-11-24 07:48:57 +0000
@@ -1,3 +1,3 @@
orange
apple
-peach
+strawberry
1つのアドバイス - RTM - または - マニュアルをお読みください。通常、他のオプションがあります。注:diff(および3つのファイルを比較するときのdiff3)の履歴オプションは、file1をfile2に変更する(またはfile2を再びfile1に変更する)「プログラムinout」を作成するのに役立ちます。これがすべての「バージョン管理」ソフトウェアの基本です。
ずっと前に覚えていた違いオプション:
-e
:File1をFile2に変換するためにedエディタで使用するのに適した形式で出力を生成します。-f
:edエディタでの使用に適していない形式で出力を生成し、-e
このフラグで生成されたものとは逆の順序でFile1をFile2に変換するために必要な修正を示します。-n
:flagsに似た出力を生成します-e
が、逆の順序で各挿入または削除コマンドで変更された行数を表示します。これはバージョン管理システム(RCS)で使用される形式です。
私が強調したい最後のオプションは、比較的言えば「新しい」オプションです。 (また、数年が経ちましたが、通常POSIXの実装ではそうではありません)。 「RCS」の「ed」に合った出力を生成する代わりに、次のものが適していますpatch
。
-u
:3行統合コンテキストを使用してdiffコマンド比較を生成します。出力は、-c
コンテキスト行が繰り返されず、代わりにコンテキスト、削除された行、および追加された行がインターリーブされて表示されることを除いて、flagsに似ています。
IMHO:2つのファイルが異なるかどうかより多くを知りたい場合、キー値はdiff -c
コマンドよりも改善されました。cmp
私はそれを見たことがありません(おそらくこれは「新しい」オプションかもしれません)。しかし、私の問題は、2つのディレクトリツリー間で異なるファイルを再帰的に検索することであるため、考慮する必要があります。
答え2
あなたの質問に対する答えはdiff情報ファイルノードにありますDetailed Context
。
異なる行を囲むコンテキスト行は、2 つの空白文字で始まります。 2つのファイルの間に違いがある行は、次のインジケータの1つで始まり、その後にスペースが続きます。
!
グループの一部である行、または2つのファイル間で変更された複数行。
!
他のファイルの対応するセクションには、というラベルの付いた対応する行セットがあります。
+
2番目のファイルに「挿入された」行は、最初のファイルのどれとも一致しません。
-
最初のファイルの「削除された」行は、2番目のファイルのどの項目とも一致しません。
情報ファイルには、ヘッダー行を含む出力形式に関する広範な情報が含まれています。もう一度お読みください。
答え3
の出力はdiff
チャンクで構成され、各チャンクは一連の変更に対応します。この***************
行は、対応するブロックの開始を示します。
各チャンクはファイル内のコンテキストを提供します。 *** 1,3 ****
は、次の内容が最初のファイルの1〜3行目で、次の--- 1,3 ----
内容が2番目のファイルの1〜3行目であることを意味します。
最初の列のマイナス記号は-
削除された行を表し、プラス記号は追加された+
行を表します。感嘆符は!
変更された行を表示します。
あなたの場合、最初のファイルが2番目のファイルpeach
に変更されました。strawberry