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


55

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

1c1
< 1
---
> 1

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


両方のファイルの内容を投稿してください;)
Rinzwind

5
diffを使用している場合、この-uオプションは人間が読める形式になっている可能性があります。
レーケンシュタイン

@Rinzwind、両方のファイルは単なるテキスト1が含まれていますが、あなたはもっと見て確認したい場合はpastebin.com/byiqdie1を
Jiew孟

ごめんなさい。私がそうするときはそうではありません。別の何かがあるはずです。やるcp 1 2);(SO 2を上書き)して、あなたは、彼らが同じであることを確認し、100%のBすることができ
Rinzwind

2
vimdiff file1 file2?:D
dylnmc

回答:


68

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

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

3行目は仕切りです。

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

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

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

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

例:

rinzwind @ discworld:〜$ more 1 
テスト
test2
test3
rinzwind @ discworld:〜$ more 2
テスト
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 ****
  テスト
!test2
  test3
--- 1,3 ----
  テスト
!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 @@
 テスト
-test2
+ test2  
 test3

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

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

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

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

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

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


非表示のキャラクターがあるかどうかを確認するにはどうすればよいですか?とにかく隠された文字を無視する方法はありますか(たぶん改行とタブを除外するだけでしょうか?)
ジウメング

いくつかの便利なオプションを入力します(man diff; からコピー))
Rinzwind

-bフラグを使用すると動作します。うーん、geditの空白に違いはあり
ません

@JiewMeng od -x1z両方のファイルで実行し、od出力を比較します。ファイル間の隠れた違いを見つける必要があります。
lgarzo

6

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

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

$ echo 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

1

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

dos2unix <file1> <file2>

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

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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.