sadece çizgi içindeki farkları gösteren fark


9

İki dosyadaki satırları karşılaştırmak istiyorum, ancak çıktıdaki gürültüyü en aza indirmek için satırlardaki gerçek farklılıkların yazdırılmasını istiyorum.

Örneğin, aşağıdaki iki dosya göz önüne alındığında:

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

(aralarındaki fark mektup örneğidir b)

Çıktı gibi bir şey olmasını istiyorum:

[-b-]{+B+}

Şu anda, bulduğum en iyi yaklaşım kullanmaktı git diff --word-diff, ancak tüm satırı çıktılar:

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

Çıktıyı manuel olarak ayrıştırmak dışında bunu yapmanın daha doğrudan bir yolu var mı? Ayrıca, ideal olarak git diff, örneğin ekstra paketler yüklemesini gerektirmeyen bir POSIX kabuk aracından daha yaygın olarak mevcut olan bir şeyi kullanmayı tercih ederim .


Farklılıkların daha görünür olduğu bir örnek kullansanız iyi olur. Bu iki karakterin aynı olmadığını görmek için şaşıracaktım.
Barmar

Maalesef, satırlar arasındaki farkı açıklayan bir not ekledim.
anol

Neden sadece kullanmayan bve Bbu nedenle çok açık? Bunun muhtemelen gerçek fark olduğunu anlıyorum, ancak sorunun amaçları için bunu kolaylaştırabilirsiniz.
Barmar

1
Yalnızca ASCII karakterleri üzerinde çalışacak çözümlerden kaçınmak istedim, ancak önerilen çözüm buna bağlı olmadığından değiştirdim. Ancak, düzenleme 6 karakterden daha kısa olacağından, cevabı yeni değişiklikleri yansıtacak şekilde güncelleyemiyorum.
anol

Yanıtlar:


14

Wdiff kullanma :

$ wdiff -3 a.txt b.txt

======================================================================
 [-b-] {+B+}
======================================================================

-3Veya ---no-commonopsiyon iki dosya arasındaki ortak ve sadece farklılıklar gösterir kelimeleri kaldıracaktır.

===...Şerit (boş hat) ile uzaklaştırılabilir grep:

$ wdiff -3 a.txt b.txt | grep -vx '=*'
 [-b-] {+B+}

wdiffveya seçeneğini diffverirseniz birleştirilmiş verileri okuyabilir , örneğin :-d--diff-inputgit

git diff somefile | wdiff -d -3

Her ne kadar wdiffbir POSIX aracı değil, yaygın olarak kullanılabilir.


Terminaliniz ANSI kaçışlarını destekliyorsa, bashrc'nizde bununla (imo) okunması daha kolay olan wdiff baskı fantezi renkli çıktı yapabileceğinizi belirtmek gerekir: alias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"( buradan alın ).
scohe001
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.