Perbedaan laporan diff tetapi kedua baris adalah sama


55

Saya berbeda 2 file dan mendapat

1c1
< 1
---
> 1

Kedua file hanya berisi "1". Bagaimana ini berbeda?


posting isi kedua file tolong;)
Rinzwind

5
Jika Anda menggunakan diff, -uopsinya mungkin lebih bisa dibaca manusia.
Lekensteyn

@Rinzwind, kedua file hanya berisi teks 1, tetapi jika Anda ingin melihat lebih banyak, lihat pastebin.com/byiqdie1
Jiew Meng

Maaf. Tidak ketika saya melakukan itu. Pasti ada sesuatu yang berbeda. Lakukan cp 1 2(jadi timpa 2) dan kemudian Anda dapat 100% b yakin mereka sama;)
Rinzwind

2
vimdiff file1 file2? : D
dylnmc

Jawaban:


68

Baris 1: akependekan dari ditambahkan, duntuk dihapus dan cuntuk diubah. Nomor baris dari file asli muncul sebelum surat-surat ini dan mereka dari file yang dimodifikasi muncul setelah surat.

Baris 2: baris dengan <berasal dari file 1 dan berbeda dari file 2.

Baris ketiga adalah pembagi.

Baris ke-4: baris dengan >berasal dari file 2 dan berbeda dari file 1.

(Jika Anda pernah melihatnya =berarti garis-garisnya sama di kedua file)

Dan masalah Anda mungkin spasi putih atau karakter yang dapat dibaca non-manusia: mereka juga memicu perbedaan.

Ada beberapa opsi untuk memanipulasi output.

Contoh:

rinzwind @ discworld: ~ $ more 1 
uji
test2
test3
rinzwind @ discworld: ~ $ more 2
uji
test2  
test3

format konteks:

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 ****
  uji
! test2
  test3
--- 1,3 ----
  uji
! test2  
  test3

SEBUAH "!" mewakili perubahan antara baris yang sesuai dalam dua file. Tanda "+" mewakili penambahan garis, sedangkan ruang kosong mewakili garis yang tidak berubah. Di awal tambalan adalah informasi file, termasuk path lengkap dan cap waktu. Di awal setiap bingkah adalah nomor baris yang berlaku untuk perubahan yang sesuai dalam file. Rentang angka yang muncul di antara set tiga tanda bintang berlaku untuk file asli, sementara set tiga tanda hubung berlaku untuk file baru. Rentang hunk menentukan nomor baris awal dan akhir di file masing-masing.

Memperluas komentar Lekensteyn tentang format terpadu:

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 @@
 uji
-test2
+ test2  
 test3

Format dimulai dengan header dua baris yang sama dengan format konteks, kecuali bahwa file asli didahului oleh "---" dan file baru didahului oleh "+++". Mengikuti ini adalah satu atau lebih perubahan bakhil yang berisi perbedaan garis dalam file. Garis kontekstual yang tidak berubah didahului oleh karakter spasi, garis tambahan didahului oleh tanda plus, dan garis penghapusan didahului oleh tanda minus.

Beberapa opsi bermanfaat:

-b Abaikan perubahan jumlah ruang putih.

-w Abaikan semua ruang putih.

-B Abaikan semua baris kosong.

-y Output dalam 2 kolom.


Bagaimana saya memeriksa apakah ada karakter tersembunyi? Apakah ada cara untuk mengabaikan karakter tersembunyi (mungkin hanya mengecualikan baris & tab baru?) Saya kira sebagian besar karakter tersembunyi tidak disengaja?
Jiew Meng

Saya memasukkan beberapa opsi berguna (disalin dari man diff;))
Rinzwind

Saya perhatikan menggunakan karya -b flag. Hmm, saya tidak melihat perbedaan di spasi putih di gedit :)
Jiew Meng

@JiewMeng Jalankan od -x1zpada kedua file dan bandingkan odoutput. Seharusnya menemukan perbedaan tersembunyi antara file.
lgarzo

6

Saya menemukan od (dump oktal) berguna ketika membandingkan file dengan karakter yang tidak dapat dicetak (terutama file yang berbeda adalah "biner" dan dengan demikian hanya memberi tahu Anda bahwa mereka memang berbeda).

Pada contoh di bawah ini, saya membuat sepasang file yang bisa seperti yang asli, lalu lakukan diff dengan output aslinya; selanjutnya saya melakukan diff pada beberapa output "od" yang berbeda.

$ 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

saya memiliki masalah yang sama dan saya menemukan solusi yang mungkin membantu, gunakan perintah:

dos2unix <file1> <file2>

salah satunya mungkin dalam format dos / windows dan yang lainnya format UNIX

setelah saya melakukan ini, diff itu semua baik!



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.