unix diff hasil sisi-ke-sisi?


106

Bagaimana cara memplot hasil perintah unix diff sisi-ke-sisi alih-alih satu perbedaan demi satu? Lihat contoh di bawah ini:

    diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf
< asdfsad
< fsaf
< fdsadf
---
> asdfsafdsf
> saf
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa
< fd
---
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> safa

Saya ingin mendapatkan sesuatu seperti:

diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf       > asdfsafdsf
< asdfsad        > saf       
< fsaf
< fdsadf
---
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa               > sadf
< fd              > sadf
---               > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > safa

vimdiff juga dapat membantu. Semoga berhasil.
shellter

Jawaban:


168

Dari man diff, Anda bisa menggunakan -yuntuk melakukan secara berdampingan.

-y, --side-by-side
       output in two columns

Karenanya, katakan:

diff -y /tmp/test1  /tmp/test2

Uji

$ cat a                $ cat b
hello                  hello
my name                my name
is me                  is you

Mari bandingkan mereka:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you

39
Perhatikan yang diffmemiliki lebar keluaran maksimum hard-code (130 kolom). Tambahkan opsi diff --width=$COLUMNSuntuk mengatur ini ke lebar terminal Anda.
ntc2

6
Juga untuk diff besar, cukup salin ke yang lebih sedikit seperti ini untuk diff scrolly / searchable yang bagus:diff -y /tmp/test1 /tmp/test2 | less
willbradley

periksa colordiff
Vladislavs Dovgalecs

5
lebih baikdiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77

@ rubo77 Bergantung pada bagaimana Anda mengatur perluasan tab, Anda mungkin juga ingin memperluas tab ke spasi sehingga keluaran berbaris dengan benar di kolom:diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
EdwardTeach

40

Dari beranda icdiff :

masukkan deskripsi gambar di sini

Terminal Anda dapat menampilkan warna, tetapi kebanyakan alat diff tidak memanfaatkannya dengan baik. Dengan menyorot perubahan, icdiff dapat menunjukkan kepada Anda perbedaan antara file yang serupa tanpa menghalangi. Ini sangat membantu untuk mengidentifikasi dan memahami perubahan kecil dalam jalur yang ada.

Alih-alih mencoba menjadi pengganti diff untuk semua keadaan, tujuan icdiff adalah menjadi alat yang dapat Anda raih untuk mendapatkan gambaran yang lebih baik tentang apa yang berubah ketika tidak segera terlihat dari diff.

IMHO, hasilnya jauh lebih mudah dibaca daripada diff -y.


29
diff -y --suppress-common-lines file1 file2

3
ini harus menjadi jawaban yang diterima karena hanya -ymenunjukkan garis umum juga yang tidak sama dengan diffpertanyaan yang adil dan asli. +1.
helix

lebih baikdiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77

13

Kamu bisa memakai:

sdiff  file1 file2

atau

diff -y file1 file2

atau

vimdiff file1 file2

untuk tampilan berdampingan.


2
Saya bertanya-tanya apa perbedaan antara diff -ydan sdiff? Hasil mereka terlihat identik dengan saya.
Hux

11

Anda harus memiliki sdiffpenggabungan perbedaan file secara berdampingan. Bacalah man sdiffuntuk cerita lengkapnya.


2
Di sistem saya (GNU / Linx) sdifftampaknya melakukan hal yang sama diff -ydan sdiffdokumentasi info mengatakan itu tidak berlaku lagi: "'sdiff' tanpa '--output' ('-o') menghasilkan perbedaan berdampingan. Penggunaan ini sudah usang; gunakan opsi '--side-by-side' ('-y') dari 'diff' sebagai gantinya. "
ntc2



6

Coba cdiff - Lihat perbedaan warna dan inkremental di ruang kerja atau dari stdin dengan dukungan berdampingan dan pager otomatis.



4

Jika file Anda memiliki penggunaan spasi dan tab yang tidak konsisten, mungkin ada gunanya menyertakan -targumen untuk memperluas tab:

diff -ty file1 file2

1

Perintah diff yang ditingkatkan dengan warna, berdampingan dan alias

Misalkan isi file seperti:

cat /tmp/test1.txt
1
2
3
4
5
8
9

dan

cat /tmp/test2.txt
1
1.5
2
4
5
6
7

Sekarang membandingkan secara berdampingan

diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7

Anda dapat menentukan alias untuk digunakan

alias diff='diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always'

Kemudian hasil diff baru:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.