Saya memiliki dua file yang ketika saya bandingkan dengan diff menunjukkan bahwa setiap baris telah berubah. Ketika saya membandingkannya dengan diff -w
(mengabaikan spasi) itu menunjukkan beberapa perubahan minimal yang saya harapkan.
Jelas ada beberapa perbedaan antara spasi putih di setiap file, tapi saya tidak tahu apa itu atau bagaimana menemukannya. Saya telah mencoba mengedit file untuk memastikan bahwa spasi sebenarnya adalah karakter spasi (sebagai lawan tab) tetapi tidak yakin apa yang harus dilakukan.
Saya telah menggunakan vim dengan :set list on
untuk mengkonfirmasi bahwa tidak ada spasi tambahan di akhir baris.
Saya juga percaya bahwa setiap file memiliki terminator garis Linux karena vim tidak menunjukkan ^M
di akhir baris.
linux
diff
whitespace
Romski
sumber
sumber
diff
tetapi banyak editor tidak, secara default, membuat ruang ini terlihat.vim
pengguna, maka sudahkah Anda mencoba menggunakanvimdiff file1 file2
untuk melihat perbedaannya?Jawaban:
Untuk
vim
pengguna, ada utilitas praktis untuk menunjukkan perbedaan yang tepat antara file:Ini akan menempatkan setiap file di windows, berdampingan, dan perbedaan dengan warna yang disorot.
Beberapa perintah berguna saat masuk
vimdiff
Sementara di
vimdiff
, beberapa perintah yang berguna adalah:]c
: lompat ke perubahan berikutnya[c
: lompat ke perubahan sebelumnyactrl-W ctrl-W
: beralih ke jendela lainzo
: lipatan terbukazc
: tutup lipatanContoh
Berikut adalah contoh
vimdiff
dalamxterm
membandingkan dua versicups
file konfigurasi:Anda dapat melihat bahwa bagian panjang dari garis yang identik telah diciutkan. Mereka dapat dibuka kembali dengan
zo
.Skema warna akan bervariasi tergantung pada pengaturan opsi Anda. Dalam contoh di atas, ketika sebuah baris muncul di satu file tetapi tidak yang lain, baris itu diberi latar belakang biru gelap. Di file lain, garis yang hilang ditandai dengan garis putus-putus. Ketika sebuah garis muncul di kedua file tetapi memiliki beberapa perbedaan, bagian-bagian yang tidak berubah dari garis memiliki latar belakang merah muda dan bagian yang diubah memiliki latar belakang merah.
sumber
Pada FreeBSD atau kebanyakan sistem Linux, Anda dapat menyalurkan output diff
cat -v -e -t
untuk menunjukkan perbedaan spasi putih.Tab akan ditampilkan sebagai
^I
, a$
akan ditampilkan di akhir setiap baris sehingga Anda dapat melihat spasi spasi, dan karakter yang tidak tercetak akan ditampilkan sebagai^X
atauM-X
.Jika Anda memiliki GNU coreutils (tersedia di sebagian besar distribusi Linux non-busybox), ini dapat disederhanakan menjadi
Pada sistem busybox, gunakan
catv -vet
.sumber
Apakah salah satu file diedit pada mesin Windows?
Pengakhiran jalur standar pada Windows adalah CRLF, di mana di Linux itu hanya LF (dan pada Mac dulu CR, tapi saya curiga itu berubah sejak OS X).
Coba
wc -l
pada file dan lihat berapa banyak baris, kemudian lihat apakah perbedaan ukurannya sama dengan jumlah baris (baris terakhir mungkin tidak diakhiri dalam satu file).sumber
od
mungkin membantu. Perintah Octal Dump dapat menampilkan konten dalam heksadesimal. Ini dapat membantu Anda melihat byte apa, termasuk byte nol atau spasi putih tak terduga, dalam file. Kemungkinan penyebab umum mungkin LF vs CRLF, tab vs spasi, atau ASCII vs Unicode (yang mungkin sering hanya memiliki byte nol sebelum setiap byte yang biasanya terlihat).od -x filename
harus mengungkapkan pola-pola itu. Jika Anda ingin cara yang lebih rumit untuk melihat file, "hex editor" apa pun dapat melakukannya dengan baik. Yang menyenangkan tentangod
itu, seperticut
perintah, itu dibangun ke banyak sistem Unix. Jadi, seringkali, tidak diperlukan instalasi terpisah.Jika Anda membutuhkan file agar lebih mirip,
tr
dapat membuat beberapa perubahan, dansed
dapat membuat lebih banyak. Saya mungkin akan mulai denganls -l
melihat file mana yang lebih besar, kemudian melihat byte untuk melihat apa yang perlu diubah, dan kemudian mengubah salah satu file sehingga mereka tampak lebih mirip.sumber
Untuk mengetahui di mana spasi dan tab sebenarnya, Anda dapat menggantinya dengan menggunakan
sed
misalnya:Dan sekarang bandingkan dua file tersebut.
sumber
cat
, seperti di superuser.com/a/913368/37154Konten berikut disalin di sini dari bagian "pertanyaan" di atas, yang ditulis oleh Romski.
Keduanya
vimdiff
dandiff file1 file2 | cat -A
sangat berguna dari perspektif alat.Terakhir, saya menemukan satu masalah lagi. Beberapa file saya dikodekan dengan UTF-8 BOM. Ini disorot menggunakan
diff file1 file2 | cat -A
. Ini memanifestasikan dirinya sebagaiM-oM-;M-?
pada awal file yang terpengaruh:Meskipun ada sejumlah masalah, saya telah mencantumkan beberapa perintah di bawah ini untuk mereka yang perlu membersihkan file-file mereka:
sumber