Bagaimana saya bisa mendapatkan diff untuk hanya menampilkan baris yang ditambahkan dan dihapus? Jika diff tidak bisa melakukannya, alat apa yang bisa?
command-line-interface
diff
C. Ross
sumber
sumber
diff A B | grep '^[<>]'
comm
.Jawaban:
Coba komunikasi
Cara lain untuk melihatnya:
Tampilkan baris yang hanya ada di file a: (yaitu apa yang dihapus dari a)
Tampilkan baris yang hanya ada di file b: (yaitu apa yang ditambahkan ke b)
Tampilkan baris yang hanya ada di satu file atau yang lain: (tetapi tidak keduanya)
(Peringatan: Jika file
a
memiliki baris yang dimulai dengan TAB, itu (TAB pertama) akan dihapus dari output.)Hanya file yang diurutkan
CATATAN: Kedua file harus disortir
comm
agar berfungsi dengan benar. Jika belum diurutkan, Anda harus mengurutkannya:Jika file sangat panjang, ini mungkin cukup membebani karena memerlukan salinan tambahan dan karenanya ruang disk dua kali lebih banyak.
sumber
comm -12 <(sort a) <(sort b)
comm
mungkin melakukan apa yang Anda inginkan. Dari halaman manualnya:Kolom-kolom ini dapat ditekan dengan
-1
,-2
dan-3
masing - masing.Contoh:
Dan jika Anda hanya ingin baris unik dan tidak peduli file mana yang ada di dalamnya:
Seperti yang dikatakan halaman manual, file harus disortir terlebih dahulu.
sumber
Untuk menampilkan penambahan dan penghapusan tanpa konteks, nomor baris, +, -, <,>! dll, Anda dapat menggunakan diff seperti ini:
Misalnya, diberikan dua file:
a.txt
b.txt
Perintah berikut akan menunjukkan baris yang dihapus dari a atau ditambahkan ke b:
keluaran:
Perintah yang sedikit berbeda ini akan menampilkan baris yang dihapus dari a.txt:
keluaran:
Akhirnya, perintah ini akan menampilkan baris yang ditambahkan ke a.txt
keluaran
sumber
Itulah yang dilakukan diff secara default ... Mungkin Anda perlu menambahkan beberapa flag untuk mengabaikan spasi putih?
harus mengabaikan garis kosong dan jumlah spasi yang berbeda.
sumber
Tidak,
diff
sebenarnya tidak menunjukkan perbedaan antara dua file dengan cara yang mungkin orang pikirkan. Ini menghasilkan urutan perintah pengeditan untuk alat yang inginpatch
digunakan untuk mengubah satu file menjadi yang lain.Kesulitan untuk setiap upaya melakukan apa yang Anda cari adalah bagaimana mendefinisikan apa yang merupakan garis yang telah berubah versus yang dihapus diikuti oleh yang ditambahkan. Juga apa yang harus dilakukan ketika baris ditambahkan, dihapus dan diubah berdekatan satu sama lain.
sumber
diff
sumber - sumbernya, tapi sepertinya saya ingat segala macam perputaran untuk melacak di mana dua file cocok untuk tetap selaras dan saya pikir ada ambang batas untuk menyerah berdasarkan seberapa jauh jaraknya. garis adalah. Tapi saya tidak ingat ada pencocokan intra-line kecuali untuk (putih) runtuh ruang kosong atau mengabaikan case. Atau (mungkin) kata-kata yang mempengaruhi itu. Bagaimanapun, ini semua tentangpatch
dan "vgrep" hanya datang untuk perjalanan. Mungkin. Pada hari Selasa.Alat perbandingan visual menyatukan dua file sehingga satu segmen dengan jumlah garis yang sama tetapi konten yang berbeda akan dianggap sebagai segmen yang diubah. Baris yang sepenuhnya baru antara segmen yang cocok dianggap sebagai segmen yang ditambahkan.
Ini juga merupakan cara alat baris perintah sdiff bekerja, yang menunjukkan perbandingan dua file secara berdampingan di terminal. Garis yang diubah dipisahkan oleh | karakter. Jika garis hanya ada di file A, <digunakan sebagai karakter pemisah. Jika garis hanya ada di file B,> digunakan sebagai pemisah. Jika Anda tidak memiliki karakter <dan> dalam file, Anda dapat menggunakan ini untuk hanya menampilkan baris yang ditambahkan:
sumber
Terima kasih senarvi, solusi Anda (tidak memilih) benar-benar memberi saya PERSIS apa yang saya inginkan setelah mencari usia pada satu ton halaman.
Dengan menggunakan jawaban Anda, inilah yang saya pikirkan untuk mendapatkan daftar hal-hal yang diubah / ditambahkan / dihapus. Contoh ini menggunakan 2 versi file / etc / passwd dan mencetak nama pengguna untuk catatan yang relevan.
sumber
Saya menemukan bentuk khusus ini sering berguna:
Contoh:
Keluaran:
Jadi itu menunjukkan baris lama dengan
-
diikuti segera oleh baris baru yang sesuai dengannya+
.Jika kami memiliki penghapusan
C
:terlihat seperti ini:
Formatnya didokumentasikan di
man diff
:dan:
dan:
Pertanyaan terkait: https://stackoverflow.com/questions/15384818/how-to-get-the-difference-only-additions-between-two-files-in-linux
Diuji di Ubuntu 18.04.
sumber
File1:
File2:
Menggunakan:
Ini menunjukkan dua kolom untuk file repetif.
Keluaran:
sumber