Diff fark bildirir ancak her iki satır aynı


55

Ben 2 dosya diff-ed ve var

1c1
< 1
---
> 1

Her iki dosya da sadece "1" içeriyordu. Bu nasıl farklı?


Her iki dosyanın içeriğini gönderin;)
Rinzwind

5
Eğer diff kullanıyorsanız, -useçenek daha insan tarafından okunabilir olabilir.
Lekensteyn

@Rinzwind, her iki dosya da yalnızca metni 1 içerir, ancak daha fazla görmek isterseniz pastebin.com/byiqdie1
Jiew Meng

Üzgünüm. Bunu yaptığımda yapmaz. Farklı bir şey olmalı. A yapın cp 1 2(yani üzerine 2 yazın) ve sonra aynı olduklarından% 100 emin olabilirsiniz;)
Rinzwind

2
vimdiff file1 file2? : D
dylnmc 24/15

Yanıtlar:


68

1. satır: aeklenmiş, dsilinmiş ve cdeğiştirilmiş duruyor . Orijinal dosyanın satır numaraları bu harflerden önce ve değiştirilen dosyanın harfleri harflerden sonra görünür.

2. satır: ile satır <1 dosyadan ve 2 dosyadan farklı.

3. satır bir bölücüdür.

4. satır: ile satır >2'den dosya ve 1'den farklı.

( =Görürseniz, satırların her iki dosyada aynı olduğu anlamına gelir)

Ve senin problemin boşluklar veya insan tarafından okunamayan diğer karakterler olabilir: bunlar da bir farkı tetikler.

Çıktıyı değiştirmek için bazı seçenekler var.

Örnek:

@ discworld rinzwind: ~ $ daha fazla 1 
Ölçek
dnm2
Test3
rinzwind @ discworld: ~ $ daha fazla 2
Ölçek
dnm2  
Test3

bağlam formatı:

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 ****
  Ölçek
! dnm2
  Test3
--- 1,3 ----
  Ölçek
! dnm2  
  Test3

Bir "!" iki dosyada karşılık gelen satırlar arasındaki değişikliği temsil eder. Bir "+", bir satırın eklenmesini temsil ederken, boş bir alan değiştirilmemiş bir satırı temsil eder. Düzeltme ekinin başında, tam yol ve bir zaman damgası dahil olmak üzere dosya bilgileri bulunur. Her bir parçanın başında, dosyalarda karşılık gelen değişiklik için geçerli olan satır numaraları bulunur. Orijinal dosyaya üç yıldız kümesi arasında görünen bir sayı aralığı uygulanırken, üç dosya kümesi de yeni dosyaya uygulanır. Aks aralıkları, ilgili dosyadaki başlangıç ​​ve bitiş satır numaralarını belirtir.

Lekensteyn'in birleşik format hakkındaki yorumunu genişletmek:

@ discworld rinzwind: ~ $ fark -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 @@
 Ölçek
-test2
+ dnm2  
 Test3

Biçim, bağlam biçimiyle aynı iki satırlık başlıkla başlar, yalnızca orijinal dosyadan önce "---" ve yeni dosyadan önce "+++" yazmaz. Bunu takiben, dosyadaki çizgi farklarını içeren bir veya daha fazla değişiklik toprağı vardır. Değişmeyen, bağlamsal satırlar boşluk karakterinden önce gelir, toplama satırları önce bir artı işaretiyle gelir ve silme satırları eksi işaretinden önce gelir.

Bazı yararlı seçenekler:

-b Beyaz boşluk miktarındaki değişiklikleri yoksay.

-w Tüm beyaz boşlukları yoksay.

-B Tüm boş satırları yoksay.

-y 2 kolonda çıktı.


Gizli karakter olup olmadığını nasıl kontrol edebilirim? Gizli karakterleri görmezden gelmenin bir yolu var mı (belki sadece yeni satırlar ve sekmeler hariç mi?) Sanırım çoğu gizli karakter kazara mı?
Jiew Meng,

Bazı yararlı seçenekler koydum ( man diff; ' dan kopyalandı ))
Rinzwind

-B bayraklarının çalıştığını fark ettim. Hmm Ben gedit içinde
boşluktaki

@JiewMeng od -x1zHer iki dosyada da çalıştırın ve odçıktıları karşılaştırın . Dosyalar arasında gizli farklılıklar bulmalıdır.
lgarzo

6

Yazdırılamayan karakterlerle dosyaları karşılaştırırken od (octal dump) işlevini kullanışlı buluyorum (özellikle farklı karar veren dosyalar "binary" olur ve bu nedenle yalnızca bunların farklı olduğunu söyler).

Aşağıdaki örnekte, orijinalleri gibi olabilecek bir çift dosya oluşturdum, sonra orijinal çıktıyla bir fark yaratacağım; daha sonra birkaç "od" çıktısı farklı olacaktır.

$ echo 1> 1
$ echo "1"> 2
$ fark 1 2

1c1  
< 1  
- ---  
> 1   

$ od -c 1> 1.od
$ od -c 2> 2.od
$ fark 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
$ fark 1.od 2.od

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

1

aynı sorunu yaşadım ve yardımcı olabilecek bir çözüm buldum, şu komutu kullanın:

dos2unix <file1> <file2>

bunlardan biri dos / windows biçiminde ve diğeri UNIX biçiminde olabilir

Bunu yaptıktan sonra fark çok iyiydi!



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.