• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:diffコマンド結果詳細内容について)

diffコマンド結果詳細内容について

このQ&Aのポイント
  • diffコマンド結果詳細内容について
  • diffコマンドの実行結果について
  • diffコマンドの実行結果の行指定について

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

man を見てもらう方がいいんだけど.... ばらすと 3,5 d 2 の 3つにわかれて ・3,5: 最初のファイル (aa) の 3~5行目を ・d: 削除するんだけど ・2: それは 2つ目のファイル (bb) の 2行目のあとにあるはずだよ のようです. ed としては最後の「2」は不要だけど, diff ではリバースパッチの関係もあって付けてます. ところで, 引数を逆にして diff bb aa はやってみました?

tcpip110
質問者

お礼

ご連絡有り難う御座います。 今回の詳細情報について コメントをつけて頂き理解できました。 また、diff bb aa については以下の通りと確認いたしました。 test_svrver3310%diff bb aa 2a3,5 > 789 > aaa > bbb ・2: 最初のファイル(bb)の2行目以降に ・a: 足す? ・3,5: 二つ目のファイル(aa)の3~5行目 2つ目のファイルの3~5行目を最初のファイル(bb)の2行目以降に 足すと、一つ目のファイルと2つ目のファイルは同じになる。 a: aについての意味はわかりませんが(dはdeleteだと認識) 今のところ、このように解釈できました。

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

#3&#4 です. 2つまとめて: a は append の意味です. あともう 1つ c (change) というのがあって, これは当該行が変更されたことを意味します. diff aa bb で 3,5d2, diff bb aa だと 2a3,5 となりますが, これは実は同じ意味です. どちらも, 「aa の 3~5行目が bb の 2行目 (の下) にある」というような意味になります. つまり diff aa bb で作った差分を bb に (逆に) 適用すると aa に戻るのですが, これを「リバースパッチ」と呼びます. それから context diff の方ですが, まず最初の *** aa --- bb で「aa から bb を作るための差分」を表し, その後の *** 1,7 *** --- 1,4 --- は「(*** で表される) ファイル aa の 1~7行目が, 以下のようにして (--- で表される) ファイル bb の 1~4行目になる」ということを意味します. -c を付けると変更のあった場所だけではなくその周辺 (context) もわかるようになり, 行数などがちょっとずれてもパッチをあてることができる場合があります.

tcpip110
質問者

お礼

早々のご回答有り難う御座います。 下記について理解できました。 ・a = append c = change ・リバースパッチ ・context diffの詳細について。 今まで、特に意識しなくdiff(オプションなし)コマンドを使っていましたが -cがいかに有効な出力結果が得られる事がわかりました。 以上、有り難う御座いました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

#3 にちょっと間違い (っぽい点) があったので訂正: この形式の diff を ed に喰わせても, まともに動作しません. 以下, 細かい話になりますが: diff の出力にはいろんな形式があります. この形は普通の (つまり何もオプションを付けないで diff を実行したときの) 出力ですね, 多分. -e を付けると ed 形式になって, これだと「本当に ed が処理できる」形式になります (今の例だと「3,5d」の 1行だけ). -c を付けるといわゆる context diff という形式で, このくらいだとなんとなく「見てわかる」ようになります. -u を付けると unified diff 形式になります (間違って「universal diff」と書いてある書物もあったりしますが). あんまり context diff と変わりません. 人が diff を見たときのわかりやすさは -e < (オプションなし) < -c ≦ -u だと思います. patch はこれらの形式を自動的に判別して適切な処理をします. ed を呼び出してるようには見えないけど. なお, ed 形式だけは情報が足りないのでリバースパッチできません (消えた 3~5行目の情報がないので戻しようがない) が, 他の形式であれば必要に応じてリバースパッチすることもあります (ちゃんと聞いてきますが).

tcpip110
質問者

補足

差異だけを出力すればいいと思い 特にオプションを付けての結果出力を気にしませんでしたが -e < (オプションなし) < -c ≦ -u -uは 当方AIXの為オプションが無かったので -cを試しました。 test_svrver333%diff -c aa bb *** aa 2007年 9月 21日 (金) --- bb 2007年 9月 21日 (金) *************** *** 1,7 **** 123 456 - 789 - aaa - bbb ccc ddd --- 1,4 ---- aaから除外された行には - が付く事がわかりました。 ただし、 *** 1,7 **** と --- 1,4 ---- が どんな意味なのか、気になってしまったのですが manコマンドで確認してもわからないので ご教授お願い致します。 念のため、diff -c bb aaも試してみました。 test_svrver336%diff -c bb aa *** bb 2007年 9月 21日 (金) --- aa 2007年 9月 21日 (金) *************** *** 1,4 **** --- 1,7 ---- 123 456 + 789 + aaa + bbb ccc ddd

  • maku_x
  • ベストアンサー率44% (164/371)
回答No.2

diff で得られた差分は、パッチを当てる時に ed に引き渡されるのですが、ed のコマンドで、 man ed より、 (.,.)d 指定した範囲をバッファから削除します。削除した範囲の後に行が続いている場合、現在行番号は、その行に設定されます。そうでない場合には、現在行番号は、削除された範囲の前の行に設定されます。 とありますから、この記述からすれば 3,5d2 の最後の "2" は不要なのですが、誤解を防ぐために diff が敢えて付加しているのでしょう。

tcpip110
質問者

お礼

ご連絡有り難う御座います。 diffコマンドだけで比較していると思っておりました。 もう少し色々調べてみます。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

"d"は、deleteのdです。 一般的に、 n1,n2 d n3 と表示された場合、 n1行からn2行のn3行数が削除されました。 との意味です。

tcpip110
質問者

お礼

ご連絡有り難う御座います。 詳細について理解できました。

関連するQ&A