私は持っていますfile1.txt
this is the original text
line2
line3
line4
happy hacking !
そしてfile2.txt
this is the original text
line2
line4
happy hacking !
GNU is not UNIX
そうすれば:diff file1.txt file2.txt
私は次を得ます:
3d2
< line3
5a5
> GNU is not UNIX
出力は通常どのように解釈されますか?<
削除という意味のようですが、どういう3d2
意味ですか5a5
?
私がするなら:
$ diff -u file1.txt file2.txt
--- file1.txt 2013-07-06 17:44:59.180000000 +0200
+++ file2.txt 2013-07-06 17:39:53.433000000 +0200
@@ -1,5 +1,5 @@
this is the original text
line2
-line3
line4
happy hacking !
+GNU is not UNIX
結果はより明確になった。しかし、その結果はどういう@@ -1,5 +1,5 @@
意味ですか?
答え1
最初のdiff
出力(いわゆる「正規の違い」)の意味は次のとおりです。
<
– file1.txt の行を表します。
>
– file2.txt の行を表します。
3d2
5a5
影響を受けた行番号と実行された操作を示します。d
削除を示し、a
追加を示します(c
変更を示す)。文字の左側の数字はfile1.txtの行番号、右側の数字はfile2.txtの行番号です。これにより3d2
、file1.txtの3行目が削除され、2行目がfile2.txtにあることがわかります(またはより良いことに、削除後の行カウンタは2行目に戻ります)。5a5
file1.txtの5行目(以前の操作から行を削除した後は実際には空)で始まり、それが追加され、追加された行がfile2.txtの5行目であることがわかります。
コマンドの出力形式はdiff -u
少し異なります(いわゆる「統合diff」形式)。ここではdiff
、2つの別々のテキストではなく、1つのテキストとして提供されます。この行の@@ -1,5 +1,5 @@
一部は-1,5
file1.txtに関連し、一部+1,5
はfile2.txtに関連しています。彼らはこれがdiff
file1.txtの1行目から始まり、5行の長さのテキストを表示すると言います。 file2.txtでも同様です。diff
1行目から始まる5行目が表示されます。
すでに述べたように、2つのファイルの行は一緒に表示されます。
this is the original text
line2
-line3
line4
happy hacking !
+GNU is not UNIX
これは-
、file1.txtで削除された行と+
追加された行を表します。
答え2
一般化する:
が与えられると、行がdiff file1 file2
失わ<
れたことを示しますfile2
。>
これは行がから失われたことを示しますfile1
。無視できますが、3d2
コマンドとともに頻繁に使用されます。5a5
patch
diff
完全な答え:
多くの* nixユーティリティはTeXinfoマニュアルとより簡単なman
ページを提供します。info command
たとえば、を実行してこれらの項目にアクセスできますinfo diff
。この場合、興味のある部分は次のとおりです。
2.4.2 一般フォーマットの詳細な説明
一般的な出力形式は、1 つ以上の差分セットで構成されます。各ブロックはファイルの異なる領域を表示します。一般的な形式のハンサムな男は次のとおりです。
CHANGE-COMMAND
< FROM-FILE-LINE
< FROM-FILE-LINE...
---
> TO-FILE-LINE
> TO-FILE-LINE...
変更コマンドには 3 種類あります。各ファイルには、最初のファイルの行番号またはカンマで区切られた行の範囲、実行する変更の種類を示す単一文字、2番目のファイルの行番号、またはカンマで区切られた行の範囲が含まれています。すべての行番号は、各ファイルの元の行番号です。変更コマンドの種類は次のとおりです。
`LaR'
Add the lines in range R of the second file after line L of the
first file. For example, `8a12,15' means append lines 12-15 of
file 2 after line 8 of file 1; or, if changing file 2 into file 1,
delete lines 12-15 of file 2.
`FcT'
Replace the lines in range F of the first file with lines in range
T of the second file. This is like a combined add and delete, but
more compact. For example, `5,7c8,10' means change lines 5-7 of
file 1 to read as lines 8-10 of file 2; or, if changing file 2 into
file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1.
`RdL'
Delete the lines in range R from the first file; line L is where
they would have appeared in the second file had they not been
deleted. For example, '5,7d3' means delete lines 5-7 of file 1;
or, if changing file 2 into file 1, append lines 5-7 of file1
after line 3 of file 2.
答え3
1) 進行状況を覚えるのに役立つように、ファイルパラメータの名前を次のように変更します。
代わりに:
diff f1 f2 # f1=file 1, and f2=file2
考える
diff file-to-edit file-with-updates
結果のデフォルト:編集するファイル、次から更新アップデートファイル。
2)また、これらのコマンド名の変更は何が起こっているのかを考えるのに役立ちます。
D代表するDそうですが、削除する'何が起こっているかをより明確にします。
ㅏ代表するㅏうん、…でも」入れる'何が起こっているかをより明確にします。
氏代表する氏ハンガー=D+ㅏまたは「削除+挿入」。
次のように使用してください。
2,4D1 または一般 D(s)-D-N=D削除( '削除する') D ライン。次に、2行のN行を同期します。
4ㅏ2,4または通常N-ㅏ-U(s) = 行 N で、ㅏdd( '入れる') 行 U を更新します。
注:これら2つのパラメータはほぼ対称です。左から右にだけ反転しています。
2,4氏5,6 または一般 R(s)-氏-U(s) = R(s) 行を削除し、その位置に更新された U(s) 行を挿入します。
たとえば、
4ㅏ2、4は、4から始まり、更新された行2〜4を追加(挿入)することを意味します。(つまり、「2,4」は2、3、4行を意味します。)
2,4D1は、2~4行(2、3、4)を削除するという意味です。
2,4氏5、6は、行2-4(2、3、4)を削除し、更新された行5-6(5、6)を挿入することを意味します。
答え4
私は以下を使用することをお勧めします:
diff -rupP file1.txt file2.txt > result.patch
そうすれば、読んでみるとresult.patch
その違いがすぐにわかります。
コマンドラインスイッチの意味は次のとおりです。
-アル字型:再帰
- ゆう: 行番号を表示
-血(小):C関数の違いを示します。
-血(大文字): ファイルが複数ある場合、フルパスを表示します.