मुझे दो snmpd.conf फाइलें मिली हैं, एक सर्वर पर काम करता है, और एक जो नहीं करता है। अप्रासंगिक टिप्पणियों और नई खबरों को छीनते हुए मैं दो कॉन्फ़िगर फ़ाइलों को कैसे अलग कर सकता हूं?
मुझे दो snmpd.conf फाइलें मिली हैं, एक सर्वर पर काम करता है, और एक जो नहीं करता है। अप्रासंगिक टिप्पणियों और नई खबरों को छीनते हुए मैं दो कॉन्फ़िगर फ़ाइलों को कैसे अलग कर सकता हूं?
जवाबों:
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
रिक्त लाइनों से बचने के लिए, और लाइनों के अलावा कुछ भी नहीं है, लेकिन समरूप लाइनों के अलावा अतिरिक्त अग्रणी स्थान का एक ही अंतर है ...
diff -b \
<(grep -vE '^([ \t]*#|^[ \t]*$)' f1)\
<(grep -vE '^([ \t]*#|^[ \t]*$)' f2)
इस बिंदु से, मैं शायद एक पटकथा में रखूंगा और मूल सुझाव जैसा कुछ लिखूंगा जो थोड़ा अधिक पठनीय होगा।
यदि आप विम के साथ कुछ सहज हैं , तो मैं दृढ़ता से आपको वीमिडिफ का उपयोग करने के लिए प्रोत्साहित करूंगा :
vimdiff file1 file2
यह दो पैन के साथ एक विम सत्र खोलेगा, जिसमें प्रत्येक पक्ष पर एक फ़ाइल होगी। हाइलाइट्स और रंग फाइलों के बीच अंतर को इंगित करेंगे, और सभी समान भागों को छिपाया जाएगा (तह, लेकिन विस्तार योग्य)।
फिर, यदि आप एक फ़ाइल से दूसरे में अंतरों का चयन करना चाहते हैं, तो आप निम्न आदेशों का उपयोग कर सकते हैं:
("वर्तमान फ़ाइल" पर विचार करें जहां कर्सर है)
^ W ^ W एक फाइल की विंडो से दूसरी फाइल की विंडो में फोकस बदलने के लिए
] सी मतभेद के साथ अगले ब्लॉक के लिए अग्रिम करने के लिए
[सी पिछले मतभेदों के लिए खोज रिवर्स करने के लिए
do ( d iff o btain) दूसरी फ़ाइल से वर्तमान फ़ाइल में परिवर्तन लाने के लिए
dp ( d iff p ut) वर्तमान फ़ाइल से अन्य फ़ाइल में परिवर्तन भेजने के लिए
नोट: दोनों करते हैं और डी पी काम करता है, तो आप एक ब्लॉक या एक ब्लॉक के तहत सिर्फ एक लाइन पर कर रहे हैं।
यू टू यू नादो
zo पाठ को प्रकट / अन-छिपाने के लिए
zc फिर से फोल्ड / रि-छिपाने के लिए टेक्स्ट
zr पूरी तरह से दोनों फ़ाइलों को प्रकट करेगा (उपयोग : तह के बारे में अधिक के लिए गुना मदद )
: diffupdate परिवर्तनों के लिए फ़ाइलों को फिर से स्कैन करेगा
जैसे ही आप बदले हुए पाठ को बदलना शुरू करते हैं या उसमें बदलाव लाना शुरू करते हैं, अब फाइलों के समान-भागों को स्वचालित रूप से मोड़ना होगा।
जब आप समाप्त कर लें, तो आप छोड़ सकते हैं और दोनों फाइलों को लिख सकते हैं : xa!
आप लिख सकते हैं, छोड़ें, परिवर्तनों को त्यागें, आदि, एक समय में एक फलक जैसा आप सामान्य रूप से करेंगे।
आप फ़ाइलों को संपादित करने के लिए सभी सामान्य विम आदेशों का उपयोग कर सकते हैं; मैंने केवल सबसे आम और उपयोगी आदेशों का वर्णन किया है जिनका उपयोग आप vimdiff सत्र में करने की संभावना रखते हैं (जैसा कि एक सामान्य विम के विपरीत)।
बियॉन्ड तुलना इसके लिए परम साधन है!
लिंक: http://www.scootersoftware.com/
विंडोज और लिनक्स के लिए उपलब्ध है।
जेफ ने टूल ओवर के बारे में एक अच्छा अवलोकन लेख लिखा:
http://www.codinghorror.com/blog/archives/000454.html
निमा के वन-लाइनर पर विस्तार करते हुए, आप इसे शेल फ़ंक्शन के रूप में कर सकते हैं और इसे अपने .bashrc में छोड़ सकते हैं
diff <(grep -v '^#' f1) <(grep -v '^#' f2)
बन जाता है (यू का उपयोग करना क्योंकि मुझे एकीकृत रूप पसंद है)
function cleandiff {
diff -u <(grep -v '^#' $1| grep -v '^ *$') <(grep -v '^#' $2 | grep -v '^ *$')
}
यदि आप GUI के दर्शकों को पसंद करते हैं, तो मेल अच्छा है, और नियंत्रित डायर / फाइलों को पुनरीक्षण समझता है।
टिप्पणियों को साफ करने के बाद, मैं केडीएफ 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
यदि आप बैश जैसे शेल का उपयोग कर रहे हैं, तो आप यह कोशिश कर सकते हैं:
# 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
।
एक्सरेक्स के समाधान का विस्तार करते हुए, आप diff
अंतर प्रदर्शित करने की तुलना में अधिक परिष्कृत उपकरणों का उपयोग कर सकते हैं ।
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)
कभी-कभी, कई अतिरिक्त आम लाइनों को फ़र्क से पहले फ़ाइलों को छाँटकर अलग किया जा सकता है, इसलिए मैं इसमें पहले से ही लिखी गई बातों को जोड़ूंगा:
diff <(grep -v '^#' f1 | sort) <(grep -v '^#' f2 | sort)
यह निश्चित रूप से उन फ़ाइलों के लिए समझ में आता है जहां लाइनों का क्रम सामग्री पर प्रभाव नहीं डालता है (इसलिए जागरूक रहें)।
मैं फ़ाइलों को अलग करने के लिए WinMerge http://winmerge.org का उपयोग करता हूं , बशर्ते मुझे उन्हें मेरी मशीन तक खींचना पड़े, लेकिन यह काम करता है।
level
! =)