2010-04-09 8 views
14

क्या किसी को एक अलग-अलग उपकरण के बारे में पता है जो मुझे दो टेक्स्ट फ़ाइलों के बीच परिवर्तन दिखा सकता है, लेकिन व्हाइटस्पेस में परिवर्तनों को अनदेखा कर रहा है जिसमें न्यूलाइन शामिल हैं?कई लाइनों/रीफ्लो-अनदेखा diff

यहाँ एक उदाहरण है:

 
the quick brown fox jumped over the lazy bear. the quick brown fox 
jumped over the lazy bear. the quick brown fox jumped over the lazy 
bear. the quick brown fox jumped over the lazy bear. 
 
quick brown fox jumped over the lazy bear. the quick brown fox jumped 
over the lazy bear. the quick brown fox jumped over the lazy bear. 
the quick brown fox jumped over the lazy bear. 

सभी मैंने किया था यह एक शब्द हटा सकते हैं और पुन: प्रवाहित था, लेकिन "diff बी" हर लाइन पर एक परिवर्तन का पता लगाता (एकदम सही ढंग से, मैं नहीं कर रहा हूँ यह कह रहा है कि यह diff में एक बग है)। लेकिन बड़ी लाटेक्स फाइलों के लिए यह एक बड़ी समस्या है; एक लंबे अनुच्छेद में एक शब्द को बदलें और आप वापस आने वाले अंतर मूल रूप से बेकार हैं।

वैसे, मुझे पता है कि इसके लिए सामान्य लाइनों-परमाणु भिन्नता की तुलना में अधिक कम्प्यूटेशनल पावर की आवश्यकता होती है। मैं केवल छोटे मानव निर्मित फाइलों पर ऐसा कर रहा हूं और मुझे लंबे समय तक इंतजार करने में खुशी होगी।

उत्तर

11

wdiff शब्द-दर-शब्द संरेखण करता है।

एक टर्मिनल में एक आसान-टू-रीड प्रदर्शन के लिए,

wdiff -al <file1> <file2> | less 

यह दिखा देंगे चलाने (कम से कम अपने सिस्टम पर) <file2> में सम्मिलन boldfaced और <file2> से विलोपन को रेखांकित किया।

+0

चेतावनी: wdiff प्रत्येक सिस्टम पर उपलब्ध नहीं हो सकता है। लेकिन यह एक अच्छी उपयोगिता – DVK

+0

हुरेय है! यही वही है जो मैं चाहता था। अब मुझे इसे जवाब देने की अनुमति देने के लिए बस स्टैक ओवरफ़्लो की प्रतीक्षा करनी है। – Adam

+0

जबकि डब्ल्यूडीआईफ़ बहुत अच्छा है, मैं वास्तव में इसे दो कारणों से कम कर रहा हूं: पहला और सबसे महत्वपूर्ण, wdiff अलग-अलग diffes की रेखा संख्या नहीं दिखाता है (बड़ी असुविधा); और दूसरा, क्योंकि यह शब्द उन्मुख है, यह व्हाइटस्पेस में परिवर्तनों को अनदेखा नहीं कर सकता है (यानी 'foreach ('बनाम' foreach (')। मैंने दूसरी समस्या की भरपाई करने के लिए एक PHP स्क्रिप्ट लिखी है, लेकिन लाइन संख्याओं के बिना यह एक विशाल है "रोचक" अंतर खोजने के लिए grep करने की कोशिश कर रहे समय की बर्बादी। मैं ++ की तुलना करने के बारे में कुछ अच्छा कहने की उम्मीद कर रहा था, लेकिन मुझे अभी तक उनसे वापस सुनना है कि उनके पास कोई है। आरपीएम – Jeff

1

एक विकल्प यह है कि पूरी फ़ाइल को शब्दों में विभाजित करके ऐसा करना है। संदर्भ जानने के terns में 100% समान परिणाम नहीं है, लेकिन आप जिस प्रकार के बदलाव की देखभाल करते हैं उसके लिए बहुत अच्छी तरह से देखते हैं।

उदाहरण:

cat file1 | perl5.8 -e '{s/\s+/\n/g;}' > file1.split_words 
cat file2 | perl5.8 -e '{s/\s+/\n/g;}' > file2.split_words 
diff file1.split_words file2.split_words 

अगर पाठ विशेष properies है, अधिक विशिष्ट तुम भी बेहतर कर सकते हैं, पुनर्प्रवाहित केवल एक पैराग्राफ की सीमा से जो एक पंक्ति में 2 नई-पंक्तियों के रूप में परिभाषित किया गया है के भीतर होता है - बस रिक्त स्थान के साथ सभी एकल न्यूलाइन को प्रतिस्थापित करें और परिणामों पर नियमित diff -w चलाएं।