Diff, tampilkan baris yang dimodifikasi hanya dari file kanan

24

Saya punya file adan bsaya ingin menampilkan baris byang berubah sejak itu dikloning a. Hanya garis yang dimodifikasi, tidak ada konteks di sekitarnya, tidak ada tanda offset yang berbeda.

Bagaimana saya bisa melakukannya dengan menggunakan skrip shell? (Tidak Ada Python / Perl / PHP / ...)

Sed dan awk adalah solusi yang bisa diterima.

Untuk saat ini, apa yang saya lakukan berbeda dengan --suppress-common-lines dan menggunakan regex backreferences untuk mengambil bagian yang tepat setelah spasi. Harus ada cara yang lebih baik?

Menggunakan perl (yang dilarang), saya akan melakukan sesuatu seperti ini:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
Robottinosino
sumber

Jawaban:

34

Dengan paket GNU diffutils , diffini akan menampilkan hanya baris dari file b yang dimodifikasi atau baru saja dimasukkan:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
manatwork
sumber
4
Luar biasa. Malu info tersebut dimakamkan di Texinfo dan tidak ada petunjuk yang disediakan di halaman manual yang saya baca ..
Robottinosino
6

Anda harus menambahkan satu opsi lagi:

grep -vf file1 file2
Sri
sumber
Meskipun ini tidak memerlukan baris untuk diurutkan, saya pikir grep menggunakan lebih banyak memori dan akan macet untuk file besar.
Sridhar Sarnobat
tidak berfungsi jika garis digandakan juga
Jayen
4
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
1kenthomas
sumber