2012-04-18 8 views
15

मुझे एक परेशान बंद-स्रोत उपकरण मिला है जो विशिष्ट जानकारी को इसकी कॉन्फ़िगरेशन फ़ाइल में लिखता है। यदि आप फिर किसी भिन्न फ़ाइल पर कॉन्फ़िगरेशन का उपयोग करने का प्रयास करते हैं, तो यह पुरानी फ़ाइल लोड करता है। Grrr ...मैं फ़ाइलों के एक सेट से पैटर्न से मेल खाने वाली सभी पंक्तियों को कैसे हटा सकता हूं?

सौभाग्य से, कॉन्फ़िगरेशन फ़ाइलें टेक्स्ट हैं, इसलिए मैं उन्हें संस्करण नियंत्रित कर सकता हूं, और यह पता चला है कि अगर कोई फ़ाइल से अपमानजनक रेखा को हटा देता है, तो कोई नुकसान नहीं होता है।

लेकिन उपकरण लाइनों में वापस डाल रहता है। इसलिए हर बार जब मैं config फ़ाइलों के नए संस्करण में जाँच करना चाहते हैं, मैं प्रतीक openDirFile युक्त सभी लाइनों को दूर करने के लिए है।

मैं प्रत्येक फ़ाइल पर grep -v चलाने के लिए कुछ प्रकार के बैश कमांड का निर्माण करने वाला हूं, परिणाम को अस्थायी फ़ाइल में संग्रहीत करता हूं, और फिर मूल को हटा देता हूं और अस्थायी नाम बदलता हूं, लेकिन मुझे आश्चर्य हुआ कि अगर किसी को पता था अच्छा साफ समाधान, या पहले से ही एक समान आमंत्रण concocted और डीबग किया था।

अतिरिक्त क्रेडिट के लिए, यह उसी निर्देशिका में एक प्रतीकात्मक लिंक को नष्ट किए बिना कैसे किया जा सकता है (favourite.rc-> signals.rc)?

उत्तर

18
sed -i '/openDirFile/d' *.conf 

यह सब conf फ़ाइलों

आप भी अपने conf फ़ाइलें अलग अलग रास्तों में रहते है, "लगता है" कमांड के साथ लाइन को जोड़ सकते हैं पर दूर करने है।

ध्यान दें कि -i "जगह में" हटा देगा।

for i in *.rc ; do TMP=$(mktemp) ; grep -v openDirFile ${i} >${TMP} ; mv ${TMP} ${i} ; done 

केंट के जवाब स्पष्ट रूप से बेहतर है:

+0

भयानक, मुझे इसके बारे में कैसे पता नहीं चला? –

0

यह बैश-जादू है कि मैं के साथ आया था।

संबंधित मुद्दे

 संबंधित मुद्दे