Farklı çıktıların anlaşılması


87

Sahibim file1.txt

this is the original text  
line2  
line3  
line4  
happy hacking !  

ve file2.txt

this is the original text  
line2  
line4  
happy hacking !  
GNU is not UNIX  

eğer yaparsam: diff file1.txt file2.txtanladım:

3d2  
< line3  
5a5  
> GNU is not UNIX  

Çıktı genel olarak nasıl yorumlanır? Sanırım bu <kaldırılmış demek ama ne demek 3d2ya da ne 5a5demek?

Eğer yaparsam:

$ diff -u file1.txt file2.txt  
--- file1.txt        2013-07-06 17:44:59.180000000 +0200  
+++ file2.txt        2013-07-06 17:39:53.433000000 +0200  
@@ -1,5 +1,5 @@  
 this is the original text  
 line2  
-line3  
 line4  
 happy hacking !  
+GNU is not UNIX  

Sonuçlar açık ancak ne anlama @@ -1,5 +1,5 @@geliyor?

Yanıtlar:


96

İlk diffçıktınızda ("normall diff" olarak adlandırılır) anlamı şu şekildedir

< - file1.txt dosyasındaki satırları gösterir

> - file2.txt içindeki satırları gösterir

3d2ve 5a5etkilenen satır numaralarını ve hangi işlemlerin gerçekleştirildiğini gösterir. dsilme, aekleme (ve cdeğişme) anlamına gelir. karakterin solundaki sayı file1.txt içindeki satır numarasıdır, sağdaki sayı file2.txt içindeki satır numarasıdır. Böylece 3d2, file1.txt dosyasındaki 3. satırın silindiğini ve file2.txt satırındaki 2. satırın bulunduğunu söyler (veya silme işleminden sonra satır sayacının satır 2 satırına geri döndüğünü söylemek daha iyidir). 5a5file1.txt satırındaki 5 numaralı satırdan başladığımızı (önceki eylemdeki bir satır silindikten sonra aslında boş olan), satırı eklediğini ve bu eklenen satırın file2.txt içindeki 5 numaralı sayı olduğunu söyler.

diff -uKomutun çıktısı biraz farklı biçimlendirilir ("birleştirilmiş fark" olarak adlandırılır). Burada diffbize iki ayrı metin yerine tek bir metin parçasını gösterir. Satırda @@ -1,5 +1,5 @@bölüm -1,5file1.txt ve bölüm file2.txt ile ilgilidir +1,5. Bize difffile1.txt satır 1'den başlayarak 5 satır uzunluğunda bir metin parçasını göstereceğini söylüyorlar. Ve file2.txt için de aynı - diffsatır 1'den başlayarak bize 5 satır gösterir.

Daha önce de söylediğim gibi, her iki dosyadaki satırlar birlikte gösteriliyor

 this is the original text  
 line2  
-line3  
 line4  
 happy hacking !  
+GNU is not UNIX  

Burada -file1.txt dosyasından silinen +satırları ve eklenen satırları belirtir.


25

Özet :

Verilen a diff file1 file2, <hattın eksik olduğu file2ve >hattın eksik olduğu anlamına gelir file1. 3d2Ve 5a5göz ardı edilebilir, bunlar için komutlardır patchsıklıkla kullanılır diff.

Tam Cevap :

Pek çok * nix yardımcı programı TeXinfo kılavuzlarını ve daha basit mansayfaları sunar. Bunlara info commandörneğin çalıştırarak erişebilirsiniz info diff. Bu durumda, ilgilendiğiniz bölüm:

2.4.2 Normal Formatın Ayrıntılı Açıklaması


Normal çıktı formatı bir veya daha fazla farklılık grubundan oluşur; Her bir parça, dosyaların farklı olduğu bir alanı gösterir. Normal formattaki parçalar, şuna benzer:

 CHANGE-COMMAND
 < FROM-FILE-LINE
 < FROM-FILE-LINE...
 ---
 > TO-FILE-LINE
 > TO-FILE-LINE...

Üç çeşit değişiklik komutu vardır. Her biri ilk dosyadaki satır numarası veya virgülle ayrılmış satır aralığından, yapılacak değişiklik türünü gösteren tek karakterden ve ikinci dosyada satır numarası veya virgülle ayrılmış satır aralığından oluşur. Tüm satır numaraları her dosyadaki orijinal satır numaralarıdır. Değişim komutları türleri:

`LaR'
     Add the lines in range R of the second file after line L of the
     first file.  For example, `8a12,15' means append lines 12-15 of
     file 2 after line 8 of file 1; or, if changing file 2 into file 1,
     delete lines 12-15 of file 2.

`FcT'
     Replace the lines in range F of the first file with lines in range
     T of the second file.  This is like a combined add and delete, but
     more compact.  For example, `5,7c8,10' means change lines 5-7 of
     file 1 to read as lines 8-10 of file 2; or, if changing file 2 into
     file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1.

`RdL'
     Delete the lines in range R from the first file; line L is where
     they would have appeared in the second file had they not been

4

Ben kullanmanızı öneririm:

diff -rupP file1.txt file2.txt > result.patch

Ardından, okuduğunuzda result.patch, farkı hemen anlayacaksınız.

Bunlar komut satırı anahtarlarının anlamlarıdır:

-r : özyinelemeli

-u : satır numarasını gösterir

-p (small): C fonksiyonlarındaki farklılıkları gösterir

-P (büyük harf): birden fazla dosya olması durumunda tam yol gösterilir


3

Yukarıdaki cevaplar iyi. Ancak yeni başlayanlar olarak, onları anlamakta biraz zorlandım ve daha fazla arama yaptıktan sonra çok yararlı bir bağlantı buldum: Linux Diff Komutanlığı ve Örnekler

Site, konsepti basit ve anlaşılması kolay bir şekilde açıklıyor.

Diff komutunun bu şekilde düşünülmesi durumunda anlaşılması daha kolaydır:

Temel olarak, bir dosyayı ikinci dosya ile aynı yapmak üzere nasıl değiştirileceğine ilişkin bir dizi talimat verir.

Aşağıdaki durumların her biri iyi açıklanmıştır:

a eklemek, değiştirmek için c, silmek için d


2

Hatırlamanıza yardımcı olacak şeyleri yeniden adlandırın!

diff  <file-to-edit>  <file-with-updates>   #Rather than diff f1 f2

Sonuçlar , üzerinde çeşitli güncellemeler uygulanarak düzenlenecek dosyada (dosya1) çalışır.


Benzerlik, bu isimleri sonuçları kavramsallaştırmak için yararlı buluyorum:

Sil = 'remove' & Add = 'insert'.

2,4d1 --- D (ler) - d -N --- d seçkin ( kaldır )) D satır (lar). Sonra her ikisinde de N satırında eşitleyin.

4a2,4 --- -N- bir çizgi, N, de-U (ler) --- bir gg ( ' ') güncelleştirme hattı (ler) U

Not: Neredeyse simetrikler.


Change = 'kaldır ve ekle'.

2,4c5,6 --- R (ler) - c -U (lar) --- R (ler) satırlarını kaldırın, ardından güncelleştirilmiş U (lar) satırlarını yerine yerleştirin.



Örneğin:

4a2,4 --- 4'ten başlayarak güncellenmiş satırlar 2-4 ekleyin (yani 2,4, 2, 3 ve 4 anlamına gelir)

2,4d1 --- satır 2-4'ü kaldırın.

2,4c5,6 --- 2-4 satırlarını kaldırın ve güncellenmiş satırları 5-6 ekleyin.


  • Bunların akış düzenleyici komutları olduğunu ve bir makine tarafından işlenecek şekilde tasarlandıklarını biliyorum. Mesela, bu, eklenen bir em komutudur, insert değil, fakat dosyada en sonunda ne yapıldığını düşünmek benim için daha yararlı. Akış işlemlerini kullanıyorlar, ancak sonuç olarak düşünmeyi seviyorum.

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.