diff, iki dosya aynı olmasına rağmen farklılık gösterir!


31

Bana benzeyen iki dosya var (izleyen boşluklar ve yeni satırlar dahil) ancak fark hala farklı olduklarını söylüyor. diff -yYan yana karşılaştırma yaptığımda bile çizgiler tamamen aynı görünüyor. Diff'den çıktı tüm 2 dosyadır.

Buna neyin sebep olduğu hakkında bir fikrin var mı?


3
Yazdırılamayan karakterleri karşılaştırmayı deneyin. Onları izlemenin en basit yolu sed -n l filename. Eğer yardımı olmazsa, bir veri örneği ekleyin ve diffburaya çıktı alın.
acele

1
Ahh evet, bir dosyadaki satırlar $ ile biter, diğeri ise $ r ile biter
MinaHany

1
Hızlı bir düzeltme, her iki dosyada da dos2unix kullanmaktır (ya da bir Windows makinesinden olduğundan şüphelendiğiniz).
Chembrad

Mevcut cevapların bir tamamlayıcısı olarak: filekomut, ASCII text, with CRLF line terminatorsvs gibi şeyler de dahil olmak üzere dosya içeriği hakkında size ipucu verir ASCII text.
Stéphane Gourichon 15:15

Yanıtlar:


29

Garip .. deneyebilir cmpmisin? ' -b' Seçeneğini de kullanmak isteyebilirsiniz .

cmp man sayfası - İki dosyayı baytla karşılaştırın.

Bu Unix / Linux hakkında güzel şeylerden biri .. pek çok araç :)


2
Bunun için teşekkürler! Anladım: bayt 19, satır 1 15 ^ M 12 ^ J ne anlama geliyor?
MinaHany


2
diff ile denedim -b ve benim için çalışıyor gibi görünüyor. sayfa diyor adam -biçindir ignore changes in the amount of white space.
rahul.deshmukhpatil

17

Farklılıklar DOS - UNIX satır sonları veya benzeri bir şeyden kaynaklanabilir mi?

Ya hexdumponlar sen ? Bu daha belirgin farklılıklar gösterebilir, örneğin:

hexdump -C file1 > file1.hex
hexdump -C file2 > file2.hex
diff file1.hex file2.hex

Eh, iki hexes farklı. her seferinde 0d 0a var,
diğeride

3
Birinde DOS satır sonlarına (CRLF) ve diğerinde UNIX satır sonlarına (LF) sahipsiniz. Bu yüzden farklı gözüküyorlar ama görsel olarak baktığınızda değil. Bak en.wikipedia.org/wiki/Newline#Conversion_utilities
mrb

Anladım! Çok teşekkürler.
Levon'un

17

Deneyin:

diff file1 file2 | cat -t

Bu -tseçenek, catherhangi bir özel karakteri net bir şekilde göstermeye neden olacaktır - örneğin. ^MCR ^Iiçin, sekme için.

Man sayfasından (OS X):

 -t      Display non-printing characters (see the -v option), and display tab characters as `^I'.

 -v      Display non-printing characters so they are visible.
         Control characters print as `^X' for control-X; the delete character
         (octal 0177) prints as `^?'.  Non-ASCII characters
         (with the high bit set) are printed as `M-' (for meta) followed by the
         character for the low 7 bits.

4

Onaylandığım ortaya çıkan ilk tahminim, dosyaların farklı satır sonları kullandığıdır. Beyaz boşlukta izleyen beyaz boşluğun varlığı gibi başka bir fark olabilir (ancak genellikle birçok çizgide bunu elde edemezsiniz) veya farklı girinti (sekmeler-boşluklar gibi). Beyaz boşluk çıkaran ve karakterleri görünür bir biçimde kontrol eden bir komut kullanın.

diff <(cat -A file1) <(cat -A file2)
diff <(sed -n l file1) <(sed -n l file2)

Farklılıkların yalnızca satır sonlarıyla ilk önce normalize ederek yapması gerektiğini onaylayabilirsiniz. Bir dos2unixyardımcı programınız olabilir ; değilse, ekstra CR (^ M, \ r, \ 015) karakterini açıkça kaldırın:

diff <(tr -d '\r' <file1) <(tr -d '\r' <file2)

veya eğer file1DOS bitense

 tr -d '\r' <file1 | diff - file2
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.