डिफ, केवल सही फ़ाइल से संशोधित रेखा दिखाएं


24

मेरे पास फ़ाइल है aऔर bमैं bउस से परिवर्तित लाइनों को आउटपुट करना चाहूंगा क्योंकि इसे क्लोन किया गया था a। बस संशोधित लाइनों, कोई आसपास के संदर्भ, कोई अलग ऑफसेट निशान।

मैं शेल स्क्रिप्टिंग का उपयोग कैसे कर सकता हूं? (कोई पायथन / पर्ल / PHP / ...)

सैड और awk स्वीकार्य समाधान हैं।

अभी के लिए, मैं जो भी कर रहा हूं, वह अलग है - व्हाट्सएप-कॉमन-लाइन्स के साथ और रीजैक्स बैकरेफेरेंस का उपयोग करके व्हॉट्सएप के बाद सिर्फ दाहिने हिस्से को लाने के लिए। इसके लिए अवश्य ही एक बेहतर तरीका होना चाहिए?

पर्ल का उपयोग करना (जो निषिद्ध है), मैं कुछ इस तरह से करूँगा:

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

जवाबों:


34

GNU डिफुटिल्स पैकेज के साथ diffयह फ़ाइल b से केवल उन लाइनों को आउटपुट करेगा, जिन्हें या तो संशोधित किया गया था या नया डाला गया था:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b

4
बहुत बढ़िया। शर्म की बात यह है कि टेक्सिनफो में दफनाया गया है और उस आदमी के पेज पर कोई संकेत नहीं दिया गया है जिसे मैं पढ़ रहा था ..
Robottinosino

6

आपको एक और विकल्प जोड़ना होगा:

grep -vf file1 file2

जबकि इसके लिए लाइनों को क्रमबद्ध करने की आवश्यकता नहीं है, मुझे लगता है कि grep बहुत अधिक मेमोरी का उपयोग करता है और बड़ी फ़ाइलों के लिए क्रैश हो जाएगा।
श्रीधर सरनोबत

काम नहीं करता है अगर लाइनों को डुप्लिकेट किया जाता है
Jayen

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.