फ़ाइल के स्क्रिप्टेड संपादन के लिए POSIX उपकरण (मानक से संशोधित सामग्री को प्रिंट करने के बजाय) है ex
।
printf '%s\n' 'g/^[^C]*C[^C]*$/d' x | ex file.txt
यदि आप सिड के अपने संस्करण का समर्थन करते हैं, तो निश्चित रूप से आप इसका उपयोगsed -i
कर सकते हैं , बस इस बात से अवगत रहें कि यदि आप एक स्क्रिप्ट लिख रहे हैं जो विभिन्न प्रकार के सिस्टम पर चलने का इरादा है।
डेविड फ़ॉस्टर ने टिप्पणियों में पूछा:
क्या कोई कारण है कि आप उपयोग कर रहे हैं या printf
नहीं echo
या कुछ और पसंद कर रहे हैं ex -c COMMAND
?
उत्तर: हां।
के लिए printf
बनाम echo
यह पोर्टेबिलिटी का सवाल है, देखें कि प्रिंट ईको से बेहतर क्यों है? और कमांड के उपयोग के बीच नईलाइन्स को इंटरसेप्ट करना भी आसान है printf
।
के लिए printf ... | ex
बनाम ex -c ...
, यह त्रुटि से निपटने का एक सवाल है। इस विशिष्ट आदेश के लिए यह कोई फर्क नहीं पड़ता, लेकिन सामान्य तौर पर यह होता है; उदाहरण के लिए, डालने का प्रयास करें
ex -c '%s/this pattern is not in the file/replacement text/g | x' filename
एक स्क्रिप्ट में। निम्नलिखित के साथ विपरीत:
printf '%s\n' '%s/no matching lines/replacement/g' x | ex file
पहला लटकाएगा और इनपुट का इंतजार करेगा; ईओएफ को ex
कमांड मिलने पर दूसरा बाहर निकल जाएगा , इसलिए स्क्रिप्ट जारी रहेगी। वैकल्पिक वर्कअराउंड हैं, जैसे कि s///e
, लेकिन वे पोसिक्स द्वारा निर्दिष्ट नहीं हैं। मैं पोर्टेबल फॉर्म का उपयोग करना पसंद करता हूं, जो ऊपर दिखाया गया है।
के लिए g
आदेश, वहाँ चाहिए अंत में एक नई पंक्ति हो, और मैं का उपयोग करना पसंद printf
के बजाय एकल उद्धरण में एक नई पंक्ति embedding आदेशों रैप करने के लिए।
awk
क्षेत्र विभाजक का सूक्ष्म उपयोग !