लाइन के अंदर केवल अंतर दिखाना


9

मैं दो फ़ाइलों में लाइनों की तुलना करना चाहता हूं, लेकिन आउटपुट में शोर को कम करने के लिए, मैं चाहता हूं कि मुद्रित होने वाली लाइनों में केवल वास्तविक अंतर हो।

उदाहरण के लिए, नीचे दी गई दो फाइलें:

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

(उनके बीच का अंतर पत्र का मामला है b)

मैं चाहता हूं कि आउटपुट कुछ इस तरह हो:

[-b-]{+B+}

वर्तमान में, मुझे जो सबसे अच्छा तरीका मिला वह उपयोग करना था git diff --word-diff, लेकिन यह पूरी लाइन को आउटपुट करता है:

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

मैन्युअल रूप से आउटपुट पार्स करने के अलावा, क्या इसे करने का एक और सीधा तरीका है? इसके अलावा, आदर्श रूप से मैं आमतौर पर उपलब्ध कुछ से अधिक का उपयोग करना पसंद करूंगा git diff, उदाहरण के लिए एक पॉस्क शेल टूल जिसे उपयोगकर्ता को अतिरिक्त पैकेज स्थापित करने की आवश्यकता नहीं होगी।


यह अच्छा होगा यदि आप एक उदाहरण का उपयोग करते हैं जहां अंतर अधिक दिखाई देते थे। मुझे यह देखना पड़ा कि वे दो पात्र एक जैसे नहीं हैं।
बरमार

क्षमा करें, मैंने लाइनों के बीच के अंतर का वर्णन करते हुए एक नोट जोड़ा।
अनोल १

क्यों नहीं बस का उपयोग करें bऔर Bइसलिए यह स्पष्ट है? मैं समझता हूं कि यह शायद वास्तविक अंतर था, लेकिन प्रश्न के उद्देश्यों के लिए आप इसे आसान बना सकते हैं।
बरमार

1
मैं ऐसे समाधानों से बचना चाहता था जो केवल ASCII वर्णों पर काम करेंगे, लेकिन चूंकि प्रस्तावित समाधान इस पर निर्भर नहीं है, इसलिए मैंने इसे बदल दिया। हालाँकि, मैं नए परिवर्तनों को प्रतिबिंबित करने के लिए उत्तर को अपडेट नहीं कर सकता क्योंकि संपादन 6 वर्णों से छोटा होगा।
अनोल

जवाबों:


14

Wdiff का उपयोग करना :

$ wdiff -3 a.txt b.txt

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

-3या ---no-commonविकल्प शब्द है कि दो फ़ाइलों के बीच आम हैं और केवल अंतर दिखाने निकाल देंगे।

===...बैनर (और खाली लाइनें) के साथ हटाया जा सकता है grep:

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

wdiffउदाहरण के लिए, diffयदि आप इसे -dया --diff-inputविकल्प देते हैं तो एकीकृत डेटा भी पढ़ सकते हैं git:

git diff somefile | wdiff -d -3

हालाँकि wdiffयह एक POSIX उपकरण नहीं है, यह आमतौर पर उपलब्ध है।


यह ध्यान देने योग्य हो सकता है कि यदि आपका टर्मिनल एएनएसआई से बच जाता है, तो आप अपने bashrc में इस के साथ पढ़ने के लिए (इमो) को आसान बनाने के लिए wdiff प्रिंट फैंसी रंगीन आउटपुट बना सकते हैं: alias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"( यहाँ से लिया गया )।
scohe001
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.