अलग आउटपुट की समझ


87

मेरे पास है file1.txt

this is the original text  
line2  
line3  
line4  
happy hacking !  

तथा file2.txt

this is the original text  
line2  
line4  
happy hacking !  
GNU is not UNIX  

अगर मैं करता हूं: diff file1.txt file2.txtमुझे मिलता है:

3d2  
< line3  
5a5  
> GNU is not UNIX  

आम तौर पर आउटपुट की व्याख्या कैसे की जाती है? मुझे लगता है कि <इसका मतलब हटा दिया गया है लेकिन इसका क्या मतलब 3d2या 5a5मतलब है?

यदि मैं करता हूँ:

$ diff -u file1.txt file2.txt  
--- file1.txt        2013-07-06 17:44:59.180000000 +0200  
+++ file2.txt        2013-07-06 17:39:53.433000000 +0200  
@@ -1,5 +1,5 @@  
 this is the original text  
 line2  
-line3  
 line4  
 happy hacking !  
+GNU is not UNIX  

परिणाम स्पष्ट हैं लेकिन @@ -1,5 +1,5 @@इसका क्या मतलब है?

जवाबों:


96

आपके पहले diffआउटपुट में (तथाकथित "नॉर्माटल डिफरेंट") का अर्थ इस प्रकार है

< - file1.txt में लाइनों को दर्शाता है

> - file2.txt में लाइनों को दर्शाता है

3d2और 5a5रेखा संख्याओं को प्रभावित किया और कौन से कार्य किए गए। dहटाने aके लिए खड़ा है, जोड़ने के लिए खड़ा है (और cबदलने के लिए खड़ा है)। वर्ण के बाईं ओर स्थित संख्या file1.txt में पंक्ति संख्या है, दाईं ओर की संख्या file2.txt में पंक्ति संख्या है। तो 3d2आपको बताता है कि file1.txt में तीसरी लाइन को हटा दिया गया था और file2.txt में लाइन नंबर 2 है (या यह कहना बेहतर है कि डिलीट करने के बाद लाइन काउंटर वापस लाइन नंबर 2 पर चला गया)। 5a5आपको बताता है कि हमने file1.txt में लाइन नंबर 5 से शुरू किया था (जो कि पिछली कार्रवाई में एक पंक्ति को हटाने के बाद वास्तव में खाली था), लाइन को जोड़ा और यह जोड़ा लाइन file2.txt में नंबर 5 है।

diff -uकमांड के आउटपुट को थोड़ा अलग स्वरूपित किया जाता है (तथाकथित "एकीकृत रूप" प्रारूप)। यहां diffहमें दो अलग-अलग ग्रंथों के बजाय पाठ का एक टुकड़ा दिखाया गया है। लाइन @@ -1,5 +1,5 @@में हिस्सा -1,5file1.txt से संबंधित है और हिस्सा file2.txt से संबंधित है +1,5। वे हमें बताते हैं कि diffपाठ का एक टुकड़ा दिखाई देगा, जो कि फ़ाइल 1.txt में पंक्ति संख्या 1 से शुरू होने वाली 5 पंक्तियाँ है। और file2.txt के बारे में भी ऐसा ही है - diffहमें लाइन 1 से शुरू होने वाली 5 लाइनें दिखाता है।

जैसा कि मैंने पहले ही कहा है, दोनों फाइलों की पंक्तियों को एक साथ दिखाया गया है

 this is the original text  
 line2  
-line3  
 line4  
 happy hacking !  
+GNU is not UNIX  

यहां -उन पंक्तियों को दर्शाया गया है, जिन्हें file1.txt से हटा दिया गया था और +उन पंक्तियों को दर्शाता है, जिन्हें जोड़ा गया था।


25

सारांश :

दिया गया diff file1 file2, <इसका मतलब है कि लाइन गायब है file2और >इसका मतलब है कि लाइन गायब है file13d2और 5a5अनदेखा किया जा सकता है, वे के लिए आदेशों हैं patchजो अक्सर साथ प्रयोग किया जाता है diff

पूर्ण उत्तर :

कई * निक्स उपयोगिताओं TeXinfo मैनुअल और साथ ही सरल manपृष्ठों की पेशकश करते हैं । info commandउदाहरण के लिए, आप इन्हें चलाकर एक्सेस कर सकते हैं info diff। इस स्थिति में, वह अनुभाग जिसमें आपकी रुचि है:

२.४.२ सामान्य प्रारूप का विस्तृत विवरण


सामान्य आउटपुट प्रारूप में एक या अधिक भिन्नताएँ होती हैं; प्रत्येक हंक एक क्षेत्र दिखाता है जहाँ फाइलें भिन्न होती हैं। सामान्य प्रारूप हॉक इस तरह दिखते हैं:

 CHANGE-COMMAND
 < FROM-FILE-LINE
 < FROM-FILE-LINE...
 ---
 > TO-FILE-LINE
 > TO-FILE-LINE...

तीन प्रकार के परिवर्तन आदेश हैं। प्रत्येक में पहली फ़ाइल में लाइन नंबर या अल्पविराम से अलग की गई रेखाएँ होती हैं, एक एकल वर्ण जो बनाने के लिए परिवर्तन का संकेत देता है, और दूसरी फ़ाइल में एक पंक्ति संख्या या अल्पविराम से अलग की गई रेखा होती है। सभी लाइन नंबर प्रत्येक फ़ाइल में मूल लाइन नंबर हैं। परिवर्तन आदेशों के प्रकार हैं:

`LaR'
     Add the lines in range R of the second file after line L of the
     first file.  For example, `8a12,15' means append lines 12-15 of
     file 2 after line 8 of file 1; or, if changing file 2 into file 1,
     delete lines 12-15 of file 2.

`FcT'
     Replace the lines in range F of the first file with lines in range
     T of the second file.  This is like a combined add and delete, but
     more compact.  For example, `5,7c8,10' means change lines 5-7 of
     file 1 to read as lines 8-10 of file 2; or, if changing file 2 into
     file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1.

`RdL'
     Delete the lines in range R from the first file; line L is where
     they would have appeared in the second file had they not been

4

मैं उपयोग करने का सुझाव देता हूं:

diff -rupP file1.txt file2.txt > result.patch

फिर, जब आप पढ़ेंगे result.patch, तो आपको तुरंत अंतर पता चल जाएगा।

ये कमांड लाइन स्विच के अर्थ हैं:

-आर : पुनरावर्ती

-u : लाइन नंबर दिखाता है

-p (छोटा): C फ़ंक्शन में अंतर दिखाता है

-पी (राजधानी): कई फाइलों के मामले में पूरा रास्ता दिखाया गया है


3

उपरोक्त उत्तर अच्छे हैं। हालाँकि एक शुरुआत के रूप में, मुझे उन्हें समझने में थोड़ी मुश्किल हुई और आगे की खोज करने पर, मुझे एक बहुत ही उपयोगी लिंक मिला: लिनक्स डिफ कमांड और उदाहरण

साइट अवधारणा को सरल और आसान तरीके से समझने के लिए समझाती है।

अगर आप इसे इस तरह समझते हैं तो डिफ कमांड को समझना आसान है:

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

निम्नलिखित मामलों में से प्रत्येक को अच्छी तरह से समझाया गया है:

a for add, c for change, d for delete


2

याद रखने में मदद करने के लिए चीजों का नाम बदलें!

diff  <file-to-edit>  <file-with-updates>   #Rather than diff f1 f2

परिणाम फाइल-टू-एडिट ( फाइल 1) पर काम करते हैं , इसके लिए विभिन्न अपडेट लागू करते हैं।


समानता, मैं इन नामों को परिणामों की अवधारणा के लिए उपयोगी मानता हूं:

हटाएं = 'निकालें' और जोड़ें = 'डालें'।

2,4d1 --- D (s) - d -N --- d elete (' निकालें ') D लाइन (s)। फिर दोनों में लाइन एन पर सिंक करें।

4a2,4 --- N- a -U (s) --- लाइन N पर, एक dd (' इन्सर्ट ') अपडेट की लाइन (s) U

नोट: वे लगभग सममित हैं।


बदलें = 'निकालें और डालें'।

2,4c5,6 --- R (s) - c -U (s) --- R (s) लाइनों को हटा दें, फिर उनके स्थान पर अपडेट की गई U (s) लाइनें डालें।



उदाहरण के लिए:

4a2,4 --- 4 से शुरू होकर अपडेटेड लाइन्स 2-4 (यानी 2,4 का मतलब 2, 3 और 4) जोड़ें

2,4d1 --- 2-4 लाइनें हटाएं।

2,4c5,6 --- लाइनों को 2-4 हटा दें, और अद्यतन लाइनें 5-6 डालें


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

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