diff出力の感嘆符はどういう意味ですか?

diff出力の感嘆符はどういう意味ですか?

学校の課題があります。このタスクの一部は、ファイルの変更を確認し、その変更をログファイルに記録することです。これまで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つのディレクトリツリー間で異なるファイルを再帰的に検索することであるため、考慮する必要があります。

おすすめ記事