एक कॉल करने के लिए एक से अधिक संपादन करें


16

मैं एक config फाइल को संपादित करने के लिए sed का उपयोग करने की कोशिश कर रहा हूं। कुछ पंक्तियाँ हैं जिन्हें मैं बदलना चाहता हूँ। मुझे पता है कि लिनक्स के तहत sed -iजगह संपादन के लिए अनुमति देता है, लेकिन इसके लिए आपको एक बैकअप फ़ाइल को सहेजने की आवश्यकता होती है। हालाँकि मैं एक से अधिक बैकअप फ़ाइल रखने से बचना चाहूँगा और एक ही बार में अपने सभी परिवर्तन कर दूँगा।

क्या ऐसा करने का कोई तरीका है sed -iया बेहतर विकल्प है?

जवाबों:


22

आप sedकेवल दोहराकर -e(या -fयदि आपकी स्क्रिप्ट किसी फ़ाइल में है) तो कई ऑपरेशन करने के लिए कह सकते हैं ।

sed -i -e 's/a/b/g' -e 's/b/d/g' filefileइन-प्लेस नामक एकल फ़ाइल में दोनों परिवर्तन करता है। बिना बैकअप फाइल के।

sed -ibak -e 's/a/b/g' -e 's/b/d/g' filefileइन-प्लेस नामक एकल फ़ाइल में दोनों परिवर्तन करता है। नाम वाली एक सिंगल बैकअप फाइल के साथ filebak


2
ध्यान दें कि अनुक्रम मायने रखता है। ऊपर दिए गए उदाहरण कमांड में, पत्र के सभी उदाहरणों aको चालू किया जाता है b, और फिर सभी उदाहरणों bको चालू किया जाता है d। आप के साथ एक ही बात कर सकता है sed -i -e 's/a\|b/d/g' fileदोनों में से किसी -turn सभी उदाहरणों aया bमें d
वाइल्डकार्ड

4

एक अन्य विकल्प ex, पूर्ववर्ती है vi। यह वास्तव में इन-प्लेस स्क्रिप्टेड फ़ाइल संपादन के लिए पसंद का POSIX उपकरण है; यह असाधारण रूप से अधिक लचीला है sed -iऔर यकीनन पर्ल की तुलना में अधिक पोर्टेबल है। (यदि आप विंडोज की दुनिया से बाहर रहते हैं, तो यह अनजाने में पर्ल से अधिक पोर्टेबल है।)

exकम से कम उदाहरणों के ढेर के साथ तुलना करने वाले उदाहरण कमांड के इस स्टैकएक्सचेंज पर एक रिश्तेदार की कमी है sed, awkऔर पर्ल का उपयोग करते हुए । हालाँकि, मैंने खुद के लिए POSIX चश्माex में बड़े पैमाने पर परिसीमन किया है और मैं तब से इसके लिए ढोल पीट रहा हूं। मैंने exयहाँ और vi / Vim stackexchange पर दोनों के उपयोग से कई उत्तर लिखे हैं :

आगे की पढाई:


3

कई -eविकल्पों का उपयोग करने के साथ-साथ , आप नई कमांड या सेमी-कॉलन का उपयोग करके एक सिंगल स्क्रिप्ट में सेड कमांड को भी अलग कर सकते हैं।

यह मामला है कि क्या स्क्रिप्ट कमांड लाइन पर एक-लाइनर है, या एक स्क्रिप्ट फ़ाइल है।

जैसे

sed -e 's/a/b/g ; s/b/d/g' file

चारों ओर अंतरिक्ष वर्ण ;वैकल्पिक हैं। मैंने यह सुनिश्चित करने के लिए यहां उनका उपयोग किया है कि अर्ध-बृहदान्त्र बाहर खड़ा है (सामान्य तौर पर, कमांड को अलग करने वाली नईलाइनों को छोड़कर, आदेशों के बीच सफेद-स्थान को अनदेखा किया जाता है ... लेकिन यह मत भूलो कि आदेशों के भीतर सफेद स्थान हो सकता है और आमतौर पर है महत्वपूर्ण)।

या:

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