Saya ingin membandingkan baris dalam dua file, tetapi untuk meminimalkan noise pada output, saya hanya ingin perbedaan garis yang sebenarnya untuk dicetak.
Misalnya, mengingat dua file di bawah ini:
a.txt
a b c d e f g h i j k l m n o p q r s t u v w x y z
b.txt
a B c d e f g h i j k l m n o p q r s t u v w x y z
(Perbedaan antara mereka adalah kasus surat b
)
Saya ingin hasilnya seperti:
[-b-]{+B+}
Saat ini, pendekatan terbaik yang saya temukan adalah menggunakan git diff --word-diff
, tetapi output keseluruhan baris:
a [-b-]{+B+} c d e f g h i j k l m n o p q r s t u v w x y z
Apakah ada cara yang lebih langsung untuk melakukannya, selain parsing output secara manual? Juga, idealnya saya lebih suka menggunakan sesuatu yang lebih umum tersedia daripada git diff
, misalnya alat shell POSIX yang tidak akan mengharuskan pengguna untuk menginstal paket tambahan.
shell-script
diff
anol
sumber
sumber
b
danB
itu sudah jelas? Saya mengerti bahwa ini mungkin perbedaan yang sebenarnya, tetapi untuk tujuan pertanyaan Anda dapat membuatnya lebih mudah.Jawaban:
Menggunakan wdiff :
The
-3
atau---no-common
opsi akan menghapus kata-kata yang umum antara dua file dan hanya menunjukkan perbedaan.The
===...
banner (dan baris kosong) dapat dihapus dengangrep
:wdiff
mungkin juga membacadiff
data terpadu jika Anda memberikannya-d
atau--diff-input
opsi, misalnya darigit
:Meskipun
wdiff
bukan alat POSIX, itu umumnya tersedia.sumber
alias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"
(diambil dari sini ).