GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Perintah Diff untuk Membandingkan Dua File di Terminal Linux

Bila Anda perlu membandingkan dua file yang berisi teks serupa di Linux, menggunakan perintah diff dapat membuat tugas Anda lebih mudah. Perintah membandingkan dua file untuk menyarankan perubahan yang akan membuat file identik. Sangat bagus untuk menemukan kurung kurawal ekstra yang merusak kode Anda yang baru diperbarui.

Menggunakan perintah diff sangat sederhana. Berikut sintaksnya:

diff [options] file1 file2

Tetapi memahami outputnya adalah hal yang berbeda. Jangan khawatir, saya akan menjelaskan hasilnya sehingga Anda dapat membandingkan dua file dan memahami perbedaan di antara keduanya.

Memahami perintah diff di Linux

Anda memerlukan beberapa file untuk memulai. Saya telah membuat daftar menggunakan generator kata acak.

Saya menambahkan daftar ke dua file berbeda dan kemudian saya memodifikasi daftar dengan:

  • Mengubah urutan daftar
  • Menambahkan Huruf
  • Mengganti kasus

Saya menyimpan file serupa ini sebagai 1.txt dan 2.txt. Inilah tampilannya sebelum Anda melakukan apa pun.

Saya sarankan Anda mengikuti tutorial sambil membaca jadi silakan buat file baru dan tambahkan konten berikut ke dalamnya.

Isi 1.txt :

jaring laba-laba
liontin
akustik
ekspansi
rekam

Isi 2.txt:

jaring laba-laba
LOKET
akustik
catatan
ekspansi

Contoh 1:Perbedaan tanpa opsi

Mari kita lihat apa yang terjadi ketika Anda menjalankan diff perintah tanpa opsi apa pun.

christopher:~$ diff 1.txt 2.txt
2c2
< locket
---
> LOCKET
3a4
> records
5d5
< record

Bingung? Kamu tidak sendiri. Outputnya tidak sepenuhnya ramah manusia. Untuk memahami apa yang terjadi, Anda perlu tahu lebih banyak tentang cara kerja diff.

Mungkin berguna untuk mengetahui bahwa saat analisis selesai, file2 [dalam sintaks] diperlakukan sebagai dokumen referensi yang Anda coba cocokkan. Jadi, Anda dapat mengatakan bahwa diff bekerja dengan cara ini:

diff <file_to_edit> <file_as_reference>

Ini juga berarti Anda akan mendapatkan hasil yang berbeda berdasarkan urutan tempat Anda memasukkan nama file.

Urutan itu penting

Contoh bagaimana output berbeda tergantung pada urutan file:

christopher:~$ diff 1.txt 2.txt 
2c2
< locket
---
> LOCKET
3a4
> records
5d5
< record

christopher:~$ diff 2.txt 1.txt 
2c2
< LOCKET
---
> locket
4d3
< records
5a5
> record

Simbol Penting dalam output perintah diff

Dengan menggunakan tabel di bawah ini sebagai referensi, Anda dapat lebih memahami apa yang terjadi di terminal Anda.

Simbol Artinya
A Tambah
C Ubah
D Hapus
# Nomor baris
– – – Memisahkan File di Output
Berkas 1
> Berkas 2

Mari kita lihat lagi output perintah diff:

christopher:~$ diff 1.txt 2.txt 
2c2
< locket
---
> LOCKET
3a4
> records
5d5
< record

Penjelasan output perintah diff

Mari kita lihat perbedaan pertama pada output:

Jalur Keluaran Penjelasan
2c2 Baris 2 file 1, GANTI dengan baris 2 file 2.
LOCKET Ubah “locket” menjadi “LOCKET” agar sesuai dengan file 2.txt

Mari kita lihat bagian selanjutnya dari output:

Jalur Keluaran Penjelasan
3a4 Setelah baris 3 dari file 1, tambahkan baris 4 dari file 2.
> catatan Artinya menambahkan “records” untuk membuat baris ke-4 pada file 1. Sehingga file 1.txt akan cocok dengan file 2.txt

Demikian pula:

Jalur Keluaran Penjelasan
5d5 Hapus teks “record” dari baris ke-5 file 1. Sehingga file 1.txt akan cocok dengan file 2.txt

Tidak ada fungsi pemeriksa ejaan atau kamus yang dibangun ke dalam perintah. Itu tidak mengenali "catatan" dan "catatan" sebagai yang terkait. Satu-satunya tujuannya adalah mencocokkan kedua file dengan sempurna.

Melihat outputnya, masih cukup sulit untuk diterjemahkan. Kecil kemungkinan Anda akan menghemat banyak waktu.

Untungnya, ada opsi yang dapat ditambahkan untuk membuat hal-hal lebih mudah dibaca manusia. Mari kita lihat beberapa contoh berbeda menggunakan daftar yang sama.

Contoh 2:Perbedaan dalam konteks “Disalin” dengan -c

Opsi konteks memberikan representasi yang lebih visual atas lebih banyak informasi terprogram yang ditampilkan secara default. Mari kita lanjutkan dengan contoh teks kita.

Simbol yang lebih penting dalam output perintah diff

Simbol Artinya
+ Tambah
! Ubah
Hapus
*** Berkas 1
– – – Berkas 2
christopher:~$ diff -c 1.txt 2.txt 
*** 1.txt    2019-10-20 12:05:09.244673327 -0400
--- 2.txt    2019-10-20 12:11More:31.382547316 -0400
***************
*** 1,5 ****
  cobweb
! locket
  acoustics
  expansion
- record
--- 1,5 ----
  cobweb
! LOCKET
  acoustics
+ records
  expansion

Jauh lebih mudah untuk memahami ketika Anda melihat informasi dengan cara ini. Alih-alih output alfanumerik, rangkaian simbol baru membantu Anda mengidentifikasi perbedaan antara kedua file dengan cepat.

Output pertama menampilkan file pertama yaitu 1.txt dan barisnya dari 1 sampai 5. Dikatakan bahwa ada sedikit perubahan pada (sebagian) baris 2 dari file 1.txt dan (bagian dari) baris 2 dari file 2 .txt.

Ini juga menunjukkan bahwa baris nomor 5 dari file 1 telah dihapus (-) di file kedua.

— 1,5 —- menunjukkan awal file kedua dan dikatakan bahwa baris 2 sedikit berubah dari baris 2 file 1. Ini juga menunjukkan bahwa baris 4 telah ditambahkan (+) di file kedua dan tidak ada yang sesuai baris dalam file 1.

Contoh 3:Perbedaan dalam konteks “Terpadu” dengan -u

Opsi ini memberikan output yang mirip dengan format konteks yang disalin. Alih-alih menampilkan dua file secara terpisah, ini menggabungkannya.

christopher:~$ diff 1.txt 2.txt -u
--- 1.txt    2019-10-20 12:05:09.244673327 -0400
+++ 2.txt    2019-10-20 12:11:31.382547316 -0400
@@ -1,5 +1,5 @@
 cobweb
-locket
+LOCKET
 acoustics
+records
 expansion
-record

Seperti yang Anda lihat, ini menggunakan simbol yang sama seperti sebelumnya, tetapi alih-alih simbol perubahan, ini menyarankan perubahan agar dibuat menggunakan + yang mudah dibaca atau - simbol. Di sini, Anda disarankan untuk menghapus baris 2 dari 1.txt dan ganti dengan baris 2 dari 2.txt .

Ke depannya, ini juga menyarankan agar Anda menambahkan catatan setelah baris berisi akustik dan hapus baris rekam setelah baris yang berisi ekspansi.

Semua perubahan ini disarankan untuk file pertama dalam perintah diff. Ini adalah skenario lain yang membantu untuk mengingat bahwa program diff menggunakan file kedua yang terdaftar sebagai 'asli' atau dasar untuk koreksi.

Untuk membandingkan daftar seperti ini, saya pribadi menemukan metode ini paling mudah digunakan. Ini memberi Anda visualisasi yang jelas dari teks yang perlu diubah untuk membuat file identik.

Contoh 4:Bandingkan tetapi abaikan kasus dengan -i

Pencarian peka huruf besar/kecil adalah default untuk diff tetapi Anda dapat menonaktifkannya. Mari kita lihat apa yang terjadi saat Anda melakukannya.

christopher:~$ diff 1.txt 2.txt -i
3a4
> records
5d5
< record

Seperti yang Anda lihat, "locket" dan "LOCKET" tidak lagi terdaftar sebagai perubahan yang disarankan.

Contoh 5:Diff dengan –color

Anda dapat menggunakan --color untuk menyorot perubahan dalam output perintah diff. Saat perintah dijalankan, bagian keluaran akan dicetak dalam warna berbeda dari palet terminal.

Contoh 6:Analisis cepat file dengan opsi perintah diff -s dan -q

Ada beberapa cara sederhana untuk memeriksa apakah file identik atau tidak. Jika Anda menggunakan -s itu akan memberi tahu Anda bahwa file-file itu identik atau akan berjalan diff seperti biasa.

Menggunakan -q hanya akan memberi tahu Anda bahwa file "berbeda". Jika tidak, Anda tidak akan mendapatkan hasil.

christopher:~$ diff 1.txt 1.txt -s
Files 1.txt and 1.txt are identical
christopher:~$ diff 1.txt 2.txt -q
Files 1.txt and 2.txt differ

Tips Bonus:Menggunakan perintah diff di Linux dengan file teks besar

Anda mungkin tidak selalu membandingkan informasi sederhana seperti itu. Anda mungkin memiliki file teks besar untuk dipindai dan ditemukan perbedaannya. Saya akan menjelaskan beberapa metode untuk menangani jenis masalah ini.

Untuk contoh ini, saya membuat dua file dengan potongan besar teks (lorem ipsum). Setiap baris memiliki ratusan kolom. Ini jelas membuat membandingkan garis menjadi sulit.

Ketika diff dijalankan pada file seperti ini, output menghasilkan potongan besar teks dan simbol sulit dilihat bahkan dengan alat seperti output kontekstual.

Untuk menghemat ruang, saya mengambil tangkapan layar dari output untuk Anda lihat.

Sangat tidak membantu, bukan?

Anda dapat menggunakan beberapa konsep yang sama untuk menganalisis jenis file ini. Mereka tidak akan bekerja dengan baik kecuali file diformat dengan benar. Beberapa blok teks besar tidak memiliki jeda baris. Anda mungkin menemukan file seperti ini di mana Anda perlu mengaktifkan "Word Wrap" untuk menampilkan semua teks dalam ruang yang ditentukan tanpa menggunakan scrollbar. Alasan ini terjadi adalah beberapa format teks tidak membuat jeda baris secara otomatis. Ini adalah bagaimana Anda berakhir dengan potongan besar teks hanya dalam 2-3 baris. Ada perbaikan yang cukup mudah untuk ini.

Gunakan fold untuk membungkus teks menjadi baris

Ini adalah Buku Pegangan Linux jadi, tentu saja, kami memiliki solusi untuk Anda dan kami dapat menjejalkan tutorial mini di dalamnya. Ada tulisan bagus tentang fold (Unix) dan fmt (GNU) di sini. Saya akan memberikan contoh singkat yang seharusnya cukup jelas untuk memajukan kita.

Perintah fold digunakan untuk memutuskan garis menggunakan jumlah kolom. Ini dapat disesuaikan untuk memberi Anda opsi tentang bagaimana jeda baris baru ini diterapkan.

Dalam contoh di sini, Anda akan memisahkan file menjadi lebar standar dan menggunakan -s pilihan. Ini memberi tahu program untuk memecah HANYA jika ada spasi, bukan di tengah teks.

Gunakan flip untuk menyisipkan jeda baris dengan cepat

fold -w 80 -s lorem.txt > lorem.txt
fold -w 80 -s lorem2.txt > lorem2.txt

Dengan kedua file dipecah menjadi 31 baris, bukan 3, Anda dapat membandingkannya dengan lebih efektif. Berikut adalah contoh keluaran Anda dengan filter konteks terpadu.

christopher:~$ diff lorem.txt 2lorem.txt -u
--- lorem.txt    2019-10-27 09:39:07.298691695 -0400
+++ 2lorem.txt    2019-10-27 09:39:08.370704501 -0400
@@ -1,10 +1,10 @@
 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus in tincidunt 
 sapien. Maecenas sagittis ex risus, in vehicula turpis imperdiet sed. Phasellus 
 placerat posuere maximus. In hac habitasse platea dictumst. Ut vel tristique 
-eros, sit amet sodales nibh. Maecenas non nibh a nisi porttitor porta. 
+eros, sit amet sodales nibh. Maecenas non nibh a nisi porttitor PORTA. 
 Suspendisse at mauris vitae sapien euismod tincidunt. Sed placerat finibus 
 blandit. Duis ornare ante at ipsum accumsan, nec bibendum nibh tincidunt. 
-Nullam ut rhoncus risus. Phasellus est ex, tristique et semper eu,  
+Nullam ut rhoncus risus. Phasellus est ex, tristique et semper eu, facilisis 
 vitae enim. Nam condimentum, purus nec semper efficitur, nisi quam vehicula 
 sem, eget finibus diam ipsum suscipit velit.

@@ -21,7 +21,7 @@

 Maecenas lacinia cursus tristique. Nulla a hendrerit orci. Donec lobortis nisi 
 sed ante euismod lobortis. Nullam sit amet est nec nunc porttitor sollicitudin 
-a ut orci. Ut euismod, ex at venenatis mattis, neque massa dignissim QUAM, at 
+a ut orci. Ut euismod, ex at venenatis mattis, neque massa dignissim quam, at 
 interdum mi metus vel tellus. Fusce nec dui a risus posuere mattis at eu orci. 
 Proin purus sem, finibus eget viverra vel, porta pulvinar ex. In hac habitasse 
 platea dictumst. Nunc faucibus leo nec tristique porta. Phasellus luctus ipsum

Gunakan diff dengan –minimal output

Anda dapat membuat ini sedikit lebih mudah dibaca dengan --minimal menandai. Ini membuat file teks yang lebih besar sedikit lebih mudah dibaca. Mari kita lihat hasilnya.

christopher:~$ diff lorem.txt 2lorem.txt --minimal
4c4
< eros, sit amet sodales nibh. Maecenas non nibh a nisi porttitor porta. 
---
> eros, sit amet sodales nibh. Maecenas non nibh a nisi porttitor PORTA. 
7c7
< Nullam ut rhoncus risus. Phasellus est ex, tristique et semper eu,  
---
> Nullam ut rhoncus risus. Phasellus est ex, tristique et semper eu, facilisis 
24c24
< a ut orci. Ut euismod, ex at venenatis mattis, neque massa dignissim QUAM, at 
---
> a ut orci. Ut euismod, ex at venenatis mattis, neque massa dignissim quam, at 

Anda dapat menggabungkan salah satu tips ini atau menggunakan beberapa opsi lain yang tercantum di halaman manual diff. Ini adalah utilitas perangkat lunak yang kuat dan mudah digunakan.

Saya harap Anda menemukan artikel ini bermanfaat. Jika Anda memiliki tip, jangan lupa untuk meninggalkan komentar dan memberi tahu kami tentangnya.


Linux
  1. Cara Menggabungkan Dua File Teks di Linux

  2. Cara Menemukan File dengan Perintah fd di Linux

  3. Cara Mengurutkan File di Linux menggunakan Perintah Sortir

  1. Bagaimana melakukan perbandingan baris demi baris file di Linux menggunakan perintah diff - Bagian II

  2. Bagaimana melakukan perbandingan file baris demi baris di Linux menggunakan perintah diff

  3. Contoh Perintah diff di Linux

  1. Perintah Rm di Linux

  2. 11 Contoh Perintah Linux diff3 (Bandingkan 3 File Baris demi Baris)

  3. Menggabungkan dua file secara manual menggunakan diff