मैं दो कॉन्‍फ़‍िगर फ़ाइलों को कैसे अलग कर सकता हूं?


15

मुझे दो snmpd.conf फाइलें मिली हैं, एक सर्वर पर काम करता है, और एक जो नहीं करता है। अप्रासंगिक टिप्पणियों और नई खबरों को छीनते हुए मैं दो कॉन्फ़िगर फ़ाइलों को कैसे अलग कर सकता हूं?


1
देखो बाहर jldugger! आप के बारे में कर रहे हैं level! =)
एक्सरेक्स

टिप्पणियों को छीनना वास्तव में एक बुरा विचार है, आप कैसे जानते हैं कि वे उन्हें देखे बिना अप्रासंगिक हैं?
बेनामी

जवाबों:


15
diff <(grep -v '^#' f1) <(grep -v '^#' f2)

रिक्त लाइनों से बचने के लिए, और लाइनों के अलावा कुछ भी नहीं है, लेकिन समरूप लाइनों के अलावा अतिरिक्त अग्रणी स्थान का एक ही अंतर है ...

diff -b \
  <(grep -vE '^([ \t]*#|^[ \t]*$)' f1)\
  <(grep -vE '^([ \t]*#|^[ \t]*$)' f2)

इस बिंदु से, मैं शायद एक पटकथा में रखूंगा और मूल सुझाव जैसा कुछ लिखूंगा जो थोड़ा अधिक पठनीय होगा।


एक एकल-पंक्ति समाधान प्रदान करने के लिए +1
6

व्हाट्सएप जैसी लाइनों को कैसे छोड़ना है, इस पर कोई विचार? एक बार जब आप टिप्पणियों को काटते हैं, तो बहुत सारी खाली लाइनें होती हैं, जो उन्हें बाहर निकालती हैं।
जूलुगर

@jldugger, टिप्पणियों और व्हाट्सएप को बाहर करने के लिए इस तरह होने के लिए grep को अपडेट करने का प्रयास करें। - egrep -v '^ (#। *।) $'
Zoredache

19

यदि आप विम के साथ कुछ सहज हैं , तो मैं दृढ़ता से आपको वीमिडिफ का उपयोग करने के लिए प्रोत्साहित करूंगा :

vimdiff file1 file2

यह दो पैन के साथ एक विम सत्र खोलेगा, जिसमें प्रत्येक पक्ष पर एक फ़ाइल होगी। हाइलाइट्स और रंग फाइलों के बीच अंतर को इंगित करेंगे, और सभी समान भागों को छिपाया जाएगा (तह, लेकिन विस्तार योग्य)।

फिर, यदि आप एक फ़ाइल से दूसरे में अंतरों का चयन करना चाहते हैं, तो आप निम्न आदेशों का उपयोग कर सकते हैं:

("वर्तमान फ़ाइल" पर विचार करें जहां कर्सर है)

^ W ^ W एक फाइल की विंडो से दूसरी फाइल की विंडो में फोकस बदलने के लिए

] सी मतभेद के साथ अगले ब्लॉक के लिए अग्रिम करने के लिए

[सी पिछले मतभेदों के लिए खोज रिवर्स करने के लिए

do ( d iff o btain) दूसरी फ़ाइल से वर्तमान फ़ाइल में परिवर्तन लाने के लिए

dp ( d iff p ut) वर्तमान फ़ाइल से अन्य फ़ाइल में परिवर्तन भेजने के लिए

नोट: दोनों करते हैं और डी पी काम करता है, तो आप एक ब्लॉक या एक ब्लॉक के तहत सिर्फ एक लाइन पर कर रहे हैं।

यू टू यू नादो

zo पाठ को प्रकट / अन-छिपाने के लिए

zc फिर से फोल्ड / रि-छिपाने के लिए टेक्स्ट

zr पूरी तरह से दोनों फ़ाइलों को प्रकट करेगा (उपयोग : तह के बारे में अधिक के लिए गुना मदद )

: diffupdate परिवर्तनों के लिए फ़ाइलों को फिर से स्कैन करेगा

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

जब आप समाप्त कर लें, तो आप छोड़ सकते हैं और दोनों फाइलों को लिख सकते हैं : xa!

आप लिख सकते हैं, छोड़ें, परिवर्तनों को त्यागें, आदि, एक समय में एक फलक जैसा आप सामान्य रूप से करेंगे।

आप फ़ाइलों को संपादित करने के लिए सभी सामान्य विम आदेशों का उपयोग कर सकते हैं; मैंने केवल सबसे आम और उपयोगी आदेशों का वर्णन किया है जिनका उपयोग आप vimdiff सत्र में करने की संभावना रखते हैं (जैसा कि एक सामान्य विम के विपरीत)।


6

बियॉन्ड तुलना इसके लिए परम साधन है!

लिंक: http://www.scootersoftware.com/

विंडोज और लिनक्स के लिए उपलब्ध है।

जेफ ने टूल ओवर के बारे में एक अच्छा अवलोकन लेख लिखा:
http://www.codinghorror.com/blog/archives/000454.html


तुलना के अलावा कमाल है!
क्लिंटन ब्लैकमोर

क्या यह निक्स सिस्टम पर उपलब्ध है?
प्रीत संघ

3 से परे लिनक्स पर एक सांत्वना अनुप्रयोग के रूप में नहीं चलता है। इसके लिए X-Windows की आवश्यकता होती है। समर्थित लिनक्स वितरण (32-बिट) रेड हैट एंटरप्राइज लिनक्स 4, 5 फेडोरा 4 - 10 नोवेल सूस लिनक्स एंटरप्राइज डेस्कटॉप 10 ओपनएसयूएसई 10.3, 11 उबंटू 6.06 - 8.10 किसी भी 64-बिट लिनक्स कर्नेल का परीक्षण नहीं किया गया सुसंगत रेड हैट लिनक्स 3
मार्क नहीं

मैं अब इस उपकरण के बिना नहीं रह सकता! एक चरम समय सेवर। जब मैं लगभग 1 साल पहले पीसी से मैक में परिवर्तित हुआ तो मुझे यह जानकर बहुत खुशी हुई कि इसे मैक में भी पोर्ट किया गया था।
जपसी

5

निमा के वन-लाइनर पर विस्तार करते हुए, आप इसे शेल फ़ंक्शन के रूप में कर सकते हैं और इसे अपने .bashrc में छोड़ सकते हैं

diff <(grep -v '^#' f1) <(grep -v '^#' f2)

बन जाता है (यू का उपयोग करना क्योंकि मुझे एकीकृत रूप पसंद है)

function cleandiff {
  diff -u <(grep -v '^#' $1| grep -v '^ *$') <(grep -v '^#' $2 | grep -v '^ *$')
}

यदि आप GUI के दर्शकों को पसंद करते हैं, तो मेल अच्छा है, और नियंत्रित डायर / फाइलों को पुनरीक्षण समझता है।


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

4

टिप्पणियों को साफ करने के बाद, मैं केडीएफ 3 का उपयोग करने की सलाह दूंगा, यह एक बहुत अच्छा अंतर / मर्ज टूल है और इसका उपयोग करने के लिए आपको वीम फू की आवश्यकता नहीं है :)


3

ऐसा करने का एक और अधिक सुंदर तरीका हो सकता है, लेकिन व्यावहारिक रूप से (और जल्दी से):

grep -v '^#' server1-snmpd.conf | grep -v '^ *$' > server1-snmpd.conf-clean
grep -v '^#' server2-snmpd.conf | grep -v '^ *$' > server2-snmpd.conf-clean
diff server1-snmpd.conf-clean server2-snmpd.conf-clean

2

यदि आप बैश जैसे शेल का उपयोग कर रहे हैं, तो आप यह कोशिश कर सकते हैं:

# Name this diff-stripped
STRIPPED=
for i in $*; do
    egrep -v "^#|^\s*" "$i" > "$i.stripped"
    STRIPPED="$STRIPPED $i.stripped"
done

diff $STRIPPED

फिर इसे इस तरह लागू करें:

 diff-stripped file1 file2 ...

तुम भी बदल सकते हैं diffकरने के लिए vimdiffया gvimdiffजो दोनों के साथ आते हैं vim


2

एक्सरेक्स के समाधान का विस्तार करते हुए, आप diffअंतर प्रदर्शित करने की तुलना में अधिक परिष्कृत उपकरणों का उपयोग कर सकते हैं ।

wdiff

wdiffकभी-कभी "बहुत स्मार्ट" हो सकता है, लेकिन मुझे कॉन्फ़िगरेशन फ़ाइलों के बीच अंतर पर त्वरित नज़र डालने के लिए यह अक्सर उपयोगी लगता है। यह स्क्रिप्ट रंगों के साथ आउटपुट के लिए उपयोग की जा सकती है:

#!/bin/bash

RED=$'\e'"[1;31m"
GREEN=$'\e'"[1;32m"
RESET=$'\e'"[0m"
WDIFF_ARGS="-w$RED -x$RESET -y$GREEN -z$RESET --avoid-wraps"

wdiff $WDIFF_ARGS \
  <(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
  <(grep -vE '^([ \t]*#|^[ \t]*$)' $2) \
  | less -R

apt-get install wdiffइस स्क्रिप्ट का उपयोग करने से पहले उबंटू और अन्य डेबियन-आधारित सिस्टम पर ।

मिलकर एक हो जाना

मेल्ड एक अच्छा GUI विकल्प है, लेकिन इसकी "टेक्स्ट फ़िल्टरिंग" सुविधा में कुछ समस्याएं हैं। टेक्स्ट फ़िल्टरिंग का उपयोग करने के बजाय, मैं मेल्ड में परिणाम दिखाने से पहले टिप्पणियों को पूरी तरह से हटा देता हूं। कमियां उनकी तुलना करते हुए फाइलों को संपादित करने की क्षमता खो रही हैं। यहाँ Meld का उपयोग करने के लिए एक सरल स्क्रिप्ट है:

#!/bin/bash

meld <(grep -vE '^([ \t]*#|^[ \t]*$)' $1) \
     <(grep -vE '^([ \t]*#|^[ \t]*$)' $2)

2

कभी-कभी, कई अतिरिक्त आम लाइनों को फ़र्क से पहले फ़ाइलों को छाँटकर अलग किया जा सकता है, इसलिए मैं इसमें पहले से ही लिखी गई बातों को जोड़ूंगा:

 diff <(grep -v '^#' f1 | sort) <(grep -v '^#' f2 | sort)

यह निश्चित रूप से उन फ़ाइलों के लिए समझ में आता है जहां लाइनों का क्रम सामग्री पर प्रभाव नहीं डालता है (इसलिए जागरूक रहें)।


1

यह निमा के एक लाइनर के समान है, लेकिन किसी के अनुरोध के अनुसार रिक्त लाइनों को भी फ़िल्टर कर देगा।

diff -u <(egrep -v '^(#| *$)' f1) <(egrep -v '^(#| *$)' f2)

(यदि संभव हो तो मैं कोर्डिफ़ भी स्थापित करूँगा और सामान्य अंतर के स्थान पर इसका उपयोग करूँगा)


1

मैं फ़ाइलों को अलग करने के लिए WinMerge http://winmerge.org का उपयोग करता हूं , बशर्ते मुझे उन्हें मेरी मशीन तक खींचना पड़े, लेकिन यह काम करता है।

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