web-dev-qa-db-ja.com

Diffは違いを報告しますが、両方の行は同じです

2つのファイルをdiff-edして取得しました

1c1
< 1
---
> 1

両方のファイルには「1」のみが含まれていました。これはどう違いますか?

55
Jiew Meng

1行目:aは追加を、dは削除を、cは変更を意味します。元のファイルの行番号はこれらの文字の前に表示され、変更されたファイルの行番号は文字の後に表示されます。

2行目:<の行はファイル1からのものであり、ファイル2とは異なります。

3行目は仕切りです。

4行目:>の行はファイル2からのもので、ファイル1とは異なります。

=が表示される場合、両方のファイルで行が同じであることを意味します)

そして、あなたの問題は空白または人間が読めない他の文字かもしれません:それらも違いを引き起こします。

出力を操作するためのオプションがいくつかあります。

例:

 rinzwind @ discworld:〜$ more 1 
 test 
 test2 
 test3 
 rinzwind @ discworld:〜$ more 2 
 test 
 test2 
 test3

コンテキスト形式:

 rinzwind @ discworld:〜$ diff -c 1 2 
 *** 1 2011-08-13 17:05:40.433966684 +0200 
 --- 2 2011-08- 13 17:11:24.369966629 +0200 
 *************** 
 *** 1,3 **** 
 test 
! test2 
 test3 
 --- 1,3 ---- 
 test 
! test2 
 test3 

「!」 2つのファイルで対応する行間の変更を表します。 「+」は行の追加を表し、空白スペースは変更されていない行を表します。パッチの先頭には、フルパスとタイムスタンプを含むファイル情報があります。各ハンクの先頭には、ファイルの対応する変更に適用される行番号があります。 3つのアスタリスクのセットの間に表示される番号範囲は元のファイルに適用され、3つのダッシュのセットは新しいファイルに適用されます。ハンク範囲は、それぞれのファイルの開始行番号と終了行番号を指定します。

統一フォーマットに関するLekensteynのコメントを拡張:

 rinzwind @ discworld:〜$ diff -u 1 2 
 --- 1 2011-08-13 17:05:40.433966684 +0200 
 +++ 2 2011-08- 13 17:11:24.369966629 +0200 
 @@ -1,3 +1,3 @@ 
 test 
-test2 
 + test2 
 test3 

形式は、元のファイルの前に「---」が付き、新しいファイルの前に「+++」が付いていることを除いて、コンテキスト形式と同じ2行のヘッダーで始まります。これに続くのは、ファイル内の行の違いを含む1つ以上の変更ハンクです。変更されていないコンテキスト行の前にはスペース文字が、追加行の前にはプラス記号が、削除行の前にはマイナス記号が付いています。

いくつかの便利なオプション:

-b空白の量の変更を無視します。

-wすべての空白を無視します。

-Bすべての空白行を無視します。

-yは2列で出力されます。

68
Rinzwind

od(8進ダンプ)は、印刷できない文字を含むファイルを比較するときに便利です(特に、diffが "バイナリ"であると判断したため、違いがあることだけがわかります)。

次の例では、元のファイルのようなファイルのペアを作成し、元の出力で差分を作成します。次に、いくつかの異なる「od」出力でdiffを実行します。

$ エコー1> 1
$ echo "1"> 2
$ diff 1 2

1c1  
< 1  
- ---  
> 1   

$ od -c 1> 1.od
$ od -c 2> 2.od
$ diff 1.od 2.od

1,2c1,2
< 0000000   1  \n
< 0000002
---
> 0000000   1      \n
> 0000003

$ od -Ax -c -t x1 1> 1.od
$ od -Ax -c -t x1 2> 2.od
$ diff 1.od 2.od

1,3c1,3
< 000000   1  \n
<         31  0a
< 000002
---
> 000000   1      \n
>         31  20  0a
> 000003
6
Charles Boling

私は同じ問題を抱えていたので、解決策を見つけたので、コマンドを使用してください:

dos2unix <file1> <file2>

それらの1つはdos/windows形式で、もう1つはUNIX形式です

私がこれをした後、差分はすべて良かったです!

1
levk

http://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html#Detailed-Unified

上記のリンクは、より簡潔で明確な説明を提供します。

0
Akshar Patel

これが空白文字を見つけるのに役立つかどうかはわかりませんが、違いを見つけるには便利です: http://www.gnu.org/software/wdiff/

0
David Winiecki