Memahami output diff

89

saya sudah file1.txt

this is the original text  
line2  
line3  
line4  
happy hacking !  

dan file2.txt

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

jika saya lakukan: diff file1.txt file2.txtsaya mendapatkan:

3d2  
< line3  
5a5  
> GNU is not UNIX  

Bagaimana hasil interpretasi secara umum? Saya berpikir bahwa <berarti dihapus tapi apa 3d2atau 5a5artinya?

Jika aku melakukan:

$ 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  

Hasilnya lebih jelas tetapi apa @@ -1,5 +1,5 @@artinya?

Jim
sumber

Jawaban:

98

Dalam diffoutput pertama Anda (disebut "normall diff") artinya adalah sebagai berikut

< - menunjukkan baris dalam file1.txt

> - menunjukkan baris dalam file2.txt

3d2dan 5a5menunjukkan nomor baris yang terpengaruh dan tindakan mana yang dilakukan. dsingkatan penghapusan, asingkatan menambahkan (dan csingkatan mengubah). nomor di sebelah kiri karakter adalah nomor baris di file1.txt, nomor di sebelah kanan adalah nomor baris di file2.txt. Jadi 3d2memberitahu Anda bahwa baris ke-3 di file1.txt telah dihapus dan memiliki nomor baris 2 di file2.txt (atau lebih baik untuk mengatakan bahwa setelah penghapusan penghitung baris kembali ke nomor baris 2). 5a5memberitahu Anda bahwa kita mulai dari baris nomor 5 di file1.txt (yang sebenarnya kosong setelah kita menghapus baris di tindakan sebelumnya), menambahkan baris dan baris yang ditambahkan ini adalah nomor 5 di file2.txt.

Output dari diff -uperintah diformat sedikit berbeda (disebut format "unified diff"). Di sini diffmenunjukkan kepada kita satu bagian teks, bukan dua teks terpisah. Pada baris @@ -1,5 +1,5 @@bagian ini -1,5berkaitan dengan file1.txt dan bagian +1,5ke file2.txt. Mereka memberi tahu kami bahwa diffakan menampilkan sepotong teks, yang panjangnya 5 baris mulai dari baris nomor 1 di file1.txt. Dan hal yang sama tentang file2.txt - diffmenunjukkan kepada kita 5 baris mulai dari baris 1.

Seperti yang telah saya katakan, garis-garis dari kedua file ditampilkan bersama

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

Di sini -menunjukkan garis-garis, yang dihapus dari file1.txt dan +menunjukkan garis-garis, yang ditambahkan.

John Smith
sumber
25

Ringkasan :

Diberikan diff file1 file2, <berarti garis hilang dalam file2dan >berarti garis hilang file1. Itu 3d2dan 5a5dapat diabaikan, mereka adalah perintah patchyang sering digunakan diff.

Jawaban Lengkap :

Banyak utilitas * nix menawarkan manual TeXinfo serta manhalaman yang lebih sederhana . Anda dapat mengaksesnya dengan menjalankan info command, misalnya info diff. Dalam hal ini, bagian yang Anda minati adalah:

2.4.2 Penjelasan terperinci tentang Format Normal


Format output normal terdiri dari satu atau lebih rongsokan perbedaan; setiap bingkah menunjukkan satu area di mana file berbeda. Bakhil format normal terlihat seperti ini:

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

Ada tiga jenis perintah perubahan. Masing-masing terdiri dari nomor baris atau rentang baris yang dipisahkan koma di file pertama, karakter tunggal yang menunjukkan jenis perubahan yang akan dibuat, dan nomor baris atau rentang baris yang dipisahkan koma di file kedua. Semua nomor baris adalah nomor baris asli di setiap file. Jenis-jenis perintah perubahan adalah:

`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
terdon
sumber
4

Saya sarankan untuk menggunakan:

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

Kemudian, ketika Anda membaca result.patch, Anda akan langsung tahu bedanya.

Ini adalah arti dari saklar baris perintah:

-r : rekursif

-u : menunjukkan nomor baris

-p (kecil): menunjukkan perbedaan fungsi C

-P (modal): untuk beberapa file path lengkap ditampilkan

Ravi
sumber
3

Jawaban di atas bagus. Namun sebagai pemula, saya menemukan mereka sedikit sulit untuk dipahami dan setelah mencari lebih jauh, saya menemukan tautan yang sangat berguna: Linux Diff Command & Contoh

Situs ini menjelaskan konsep dengan cara yang sederhana dan mudah dipahami.

Perintah Diff lebih mudah dipahami jika Anda menganggapnya sebagai berikut:

Pada dasarnya, ini mengeluarkan serangkaian instruksi untuk bagaimana mengubah satu file untuk membuatnya identik dengan file kedua.

Setiap kasus berikut dijelaskan dengan baik:

a untuk tambah, c untuk perubahan, d untuk menghapus

userAsh
sumber
2

Ganti nama hal-hal untuk membantu Anda mengingat!

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

Hasilnya beroperasi pada file-untuk-edit (file1), menerapkan berbagai pembaruan untuk itu.


Kesamaan, saya menemukan perubahan nama ini berguna untuk membuat konsep hasil:

Hapus = 'hapus' & Tambah = 'masukkan'.

2,4d1 --- D (s) - d -N --- d elete (' remove ') D baris (s). Kemudian sinkronkan pada garis N di keduanya.

4a2,4 --- N- sebuah -U (s) --- Pada baris N, sebuah dd ( ' insert ') pembaruan line (s) U

Catatan: Mereka hampir simetris.


Ubah = 'hapus & sisipkan'.

2,4c5,6 --- R (s) - c -U (s) --- Hapus baris R, lalu masukkan garis U yang diperbarui di tempatnya.



Sebagai contoh:

4a2,4 --- mulai dari 4, tambahkan baris yang diperbarui 2-4 (yaitu 2,4 berarti 2, 3 dan 4)

2,4d1 --- hapus baris 2-4.

2,4c5,6 --- hapus baris 2-4, dan masukkan baris yang diperbarui 5-6


  • Saya tahu bahwa ini adalah perintah editor aliran, dan dirancang untuk diproses oleh mesin. Sebagai contoh, itu benar-benar adalah perintah ed add, not insert, tetapi lebih membantu bagi saya untuk memikirkan insert yang pada akhirnya dilakukan pada file. Mereka menggunakan operasi stream, tapi saya suka berpikir dalam hal hasil.

Pandangan elips
sumber