GNU/Linux >> Belajar Linux >  >> Linux

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

Di bagian pertama seri tutorial perintah diff ini, kita membahas dasar-dasar perintah, termasuk cara kerjanya dan bagaimana output yang dihasilkannya dapat dipahami. Meskipun pasti ada sedikit kurva pembelajaran yang terlibat dengan utilitas baris perintah ini, ada baiknya dipelajari terutama jika pekerjaan sehari-hari Anda melibatkan melakukan tugas terkait file pada mesin Linux khusus CLI.

Dengan asumsi bahwa Anda sudah mengetahui penggunaan dasar perintah diff, dalam tutorial ini, kita akan membahas berbagai opsi baris perintah yang disediakan alat ini, melalui beberapa contoh yang mudah dipahami.

Namun sebelum kita melanjutkan, perlu diingat bahwa semua contoh dalam tutorial ini telah diuji di Ubuntu 14.04 dengan Bash versi 4.3.11(1) dan diff versi 3.3.

 

Opsi perintah yang berbeda

1. Laporkan jika filenya sama

Secara default, ketika perintah diff mendeteksi bahwa file yang dibandingkan adalah identik, itu tidak menghasilkan output apa pun.

$ diff file1 file2
$

Namun, ada opsi baris perintah (-s) yang dapat digunakan untuk memaksa perintah untuk melaporkannya di output:

$ diff -s file1 file2
Files file1 and file2 are identical

2. Konteks yang disalin dan konteks Terpadu

Ini pada dasarnya adalah dua format berbeda di mana perintah diff dapat menghasilkan outputnya. Konteks yang disalin diaktifkan menggunakan opsi baris perintah -c, sedangkan konteks Terpadu diaktifkan menggunakan -u. Berikut ini adalah contoh dari yang pertama:

$ diff -c file1 file2
*** file1 2016-12-29 09:36:47.175597647 +0530
--- file2 2016-12-29 09:19:55.799558326 +0530
***************
*** 1,3 ****
Hi
! Helllo
Bye
--- 1,3 ----
Hi
! Hello
Bye

Jadi, dalam format output konteks yang Disalin, garis yang berbeda ditunjukkan dengan tanda seru (!).

Dan inilah contoh format konteks Unified:

$ diff -u file1 file2
--- file1 2016-12-29 09:36:47.175597647 +0530
+++ file2 2016-12-29 09:19:55.799558326 +0530
@@ -1,3 +1,3 @@
Hi
-Helllo
+Hello
Bye

Dalam format keluaran ini, + dan - simbol sebelum baris menunjukkan versi dari baris yang berbeda : '-' saat baris dalam file1 hilang dari file2 , '+' ketika baris dalam file2 telah ditambahkan ke file1.

3. Keluarkan skrip 'ed'

Perintah diff juga mampu menghasilkan perintah yang dapat digunakan editor 'ed' untuk mengonversi file asli (file1 dalam contoh kita di sini) menjadi file baru (file2). Inilah cara Anda melakukannya:

Misalkan file1 dan file2 berisi perubahan berikut:

$ diff file1 file2
2c2
< Helllo
---
> Hello

Sekarang, gunakan opsi baris perintah -e untuk menghasilkan keluaran yang dimengerti oleh editor 'ed', dan arahkan keluaran itu ke dalam sebuah file:

diff -e file1 file2 > out

Inilah yang keluar berisi dalam hal ini:

2c
Hello
.

Yang Anda butuhkan selanjutnya adalah menambahkan perintah 'w' di akhir keluar berkas.

2c
Hello
.
w

Sekarang, jalankan perintah berikut:

ed - file1 < out

Dan Anda akan melihat bahwa file1 dan file2 sekarang identik.

$ diff file1 file2
$

Untuk informasi lebih lanjut tentang fungsi ini, buka di sini.

4. Hasilkan output dalam dua kolom

Biasanya, perintah diff menghasilkan output dengan cara berikut:

$ diff file1 file2
2c2
< Helllo
---
> Hello

Tetapi ada opsi baris perintah (-y) yang mengarahkan diff untuk menghasilkan output dalam dua kolom terpisah. Ini contohnya:

$ diff -y file1 file2
Hi                               Hi
Helllo                         | Hello
Bye                              Bye

Seperti yang Anda lihat, format output ini menggunakan '|' untuk menunjukkan garis yang berbeda.

5. Sembunyikan baris umum

Jika Anda mengamati output yang ditampilkan di bagian sebelumnya (poin 4 di atas), Anda akan melihat bahwa dengan -y opsi baris perintah, diff - dalam output - menghasilkan baris yang sama juga. Jika Anda perlu menyembunyikan garis yang identik ini, Anda dapat menggunakan --suppress-common-lines pilihan.

[email protected]:~$ diff -y --suppress-common-lines file1 file2
Helllo                                   | Hello

6. Tampilkan fungsi C setiap perubahan di 

Untuk kasus saat Anda menggunakan diff untuk membandingkan dua file bahasa C, ada opsi baris perintah (-p) yang mengarahkan utilitas untuk menunjukkan secara tepat fungsi C mana yang digunakan setiap perubahan. Misalnya, anggaplah ini adalah dua file C:

file1.c:

#include<stdio.h>

void compare(float x, float y)
{
if(x == y) // incorrect way
{
printf("\n EQUAL \n");
}
}


int main(void)
{
compare(1.234, 1.56789);

return 0;
}

file2.c:

#include<stdio.h>

void compare(float x, float y)
{
if(x == y)
{
printf("\n EQUAL \n");
}
}


int main(void)
{
compare(1.234, 1.56789);

return 0;
}

Berikut adalah output ketika kedua file dibandingkan secara normal:

$ diff file1.c file2.c 
5c5
< if(x == y) // incorrect way
---
> if(x == y)

Dan inilah hasilnya, ketika file-file tersebut dibandingkan menggunakan -p pilihan:

$ diff -p file1.c file2.c 
*** file1.c 2016-12-29 11:45:36.587010816 +0530
--- file2.c 2016-12-29 11:46:39.823013274 +0530
***************
*** 2,8 ****

void compare(float x, float y)
{
! if(x == y) // incorrect way
{
printf("\n EQUAL \n");
}
--- 2,8 ----

void compare(float x, float y)
{
! if(x == y)
{
printf("\n EQUAL \n");
}

Jadi seperti yang Anda lihat, dengan -p , diff memberi Anda tampilan yang lebih mendetail tentang di mana perubahannya, menunjukkan garis yang berbeda menggunakan tanda seru (!).

7. Bandingkan subdirektori secara rekursif

Perintah diff juga memungkinkan Anda membandingkan subdirektori secara rekursif, tetapi itu bukan perilaku defaultnya. Yang ingin saya katakan adalah, jika Anda mengambil kasus berikut:

$ diff diff-files/ second-diff-files/
diff diff-files/file1 second-diff-files/file1
1c1
< Hi
---
> i
diff diff-files/file2 second-diff-files/file2
2c2
< Hello
---
> ello

Perintah diff hanya membandingkan file di direktori tingkat atas, tetapi jika Anda menggunakan opsi baris perintah -r (yang untuk diff rekursif), Anda akan melihat bahwa bahkan file yang ada di subdirektori dibandingkan:

$ diff -r diff-files/ second-diff-files/
diff -r diff-files/file1 second-diff-files/file1
1c1
< Hi
---
> i
diff -r diff-files/file2 second-diff-files/file2
2c2
< Hello
---
> ello
diff -r diff-files/more-diff-files/file1 second-diff-files/more-diff-files/file1
1c1
< Hi
---
> i
diff -r diff-files/more-diff-files/file2 second-diff-files/more-diff-files/file2
2c2
< Hello
---
> ello

8. Perlakukan file yang tidak ada sebagai kosong

Perintah diff juga menyediakan opsi yang dapat digunakan untuk mengarahkan alat untuk memperlakukan file yang tidak ada sebagai kosong. Misalnya, jika Anda membandingkan file1 dengan file3 (yang tidak ada), perilaku default diff adalah menghasilkan kesalahan:

$ diff file1 file3
diff: file3: No such file or directory

Ini tidak salah; sebenarnya ini sangat masuk akal. Tetapi mungkin ada kasus di mana-di Anda tidak ingin perintah diff melempar kesalahan untuk situasi seperti itu (saat menjadi bagian dari skrip bash, mungkin?), maka untuk skenario itu, Anda dapat menggunakan opsi baris perintah -N yang memaksa perintah untuk memperlakukan file yang tidak ada sebagai kosong, dan melanjutkan perbandingan.

$ diff -N file1 file3
1,5d0
< Hi
<
< Helllo
<
< Bye

Kesimpulan

Jika Anda mempelajari kedua bagian dari seri tutorial ini dengan benar, dan mempraktikkan semua contoh yang terdapat dalam artikel tersebut, maka tidak berlebihan untuk mengatakan bahwa pada akhirnya Anda akan memiliki perintah yang baik pada alat tersebut. Tentu saja, kami tidak dapat membahas semua yang terkait dengan perbedaan dalam seri ini, tetapi yakinlah bahwa banyak fitur/fungsi penting telah dibahas.

Bagi mereka yang ingin tahu lebih banyak tentang utilitas, halaman manual selalu tersedia untuk Anda. Dan belum lagi Anda harus tetap sering menggunakan alat ini dengan kumpulan file yang berbeda untuk mensimulasikan kasus penggunaan yang berbeda.


Linux
  1. Bagaimana cara mematikan proses di Linux menggunakan perintah?

  2. Cara Mentransfer file dengan aman menggunakan Perintah SCP di Linux

  3. Cara membuat file sparse di Linux menggunakan perintah 'dd'

  1. Cara Mengganti Nama File di Linux

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

  3. Cara Reboot Linux Menggunakan Command Line

  1. Bagaimana Cara Mengompres dan Mengekstrak File Menggunakan Perintah tar di Linux?

  2. Cara Mengurutkan File di Linux menggunakan Perintah Sortir

  3. Contoh Perintah diff di Linux