आपको वास्तव में इसके लिए sed का उपयोग नहीं करना चाहिए। यह प्रश्न हास्यास्पद रूप से अक्सर प्रतीत होता है, और ऐसा लगता है कि यह बहुत ही अजीब लगता है, क्योंकि सामान्य समाधान इतना छोटा है, ऐसा लगता है कि लोग यह जानना चाहते हैं कि कैसे इसे sed, और अजगर में, और रूबी आदि में करना है। ।
#!/bin/sh -e
in=${1?No input file specified}
mv $in ${bak=.$in.bak}
shift
"[email protected]" < $bak > $in
एक निष्पादन योग्य फ़ाइल नाम inline
में अपने रास्ते में रखो कि, और फिर समस्या सामान्य रूप में हल किया जाता है: यदि आप एक इनपुट पर काम करते हैं और इसे अधिलेखित एक फिल्टर करना चाहते हैं, निम्नलिखित सरल स्क्रिप्ट का उपयोग। उदाहरण के लिए:
inline input-file sed -e s/foo/bar/g
अब, आप एक से अधिक बैकअप रखने के लिए, या तर्क जोड़ना चाहते हैं, तो आपको कुछ विकल्प बैकअप योजना के नामकरण, या जो कुछ भी बदलने के लिए है, तो आप एक ही स्थान पर ठीक करें। perl
के साथ फ़ाइल में प्रोसेस करते समय बैकअप फ़ाइल पर 1-अप काउंटर प्राप्त करने के लिए कमांड लाइन विकल्प क्या है? ruby
के साथ क्या? क्या विकल्प gnu-sed
के लिए अलग है? awk
इसे कैसे संभालता है? यूनिक्स का पूरा friggin 'बिंदु यह है कि उपकरण केवल एक चीज करते हैं। बैकअप फ़ाइलों के लिए तर्क को संभालना दूसरी बात है, और इसे बाहर निकालने की आवश्यकता है। यदि आप किसी टूल को कार्यान्वित कर रहे हैं, तो बैकअप फ़ाइलों को बनाने के लिए तर्क जोड़ें। अपने उपयोगकर्ताओं को इसके लिए एक दूसरा उपकरण उपयोग करने के लिए कहें। एकीकरण खराब है। मॉड्यूलरिटी अच्छा है। वह यूनिक्स तरीका है।
ध्यान दें कि इस स्क्रिप्ट में कई समस्याएं हैं।उदाहरण के लिए, इनपुट फ़ाइल की अनुमति/मोड बदला जा सकता है। मुझे यकीन है कि असंख्य अन्य मुद्दे हैं। हालांकि, एक आवरण स्क्रिप्ट में बैकअप तर्क रख कर, आप इन सभी मुद्दों को स्थानीय बनाना और जब तक python
जगह में फ़ाइल रहता है और inode परिवर्तन नहीं होता है, चिंता करने की sed
फ़ाइलों और परिवर्तन मोड अधिलेखित कर देता है कि नहीं है (मैं बनाया उन दो मामलों अप, बिंदु और किया जा रहा है कि नहीं सभी उपकरण, एक ही तर्क का उपयोग करेगा, जबकि आवरण स्क्रिप्ट है।)
स्रोत
2012-05-31 13:07:18
एसईडी -es/some1/some2/जी input.file> output.file; – 0xAX