sed - कैसे कई लगातार प्रतिस्थापन करने के लिए लेकिन प्रक्रिया फ़ाइल केवल एक बार?


31

अगर मैं कई प्रतिस्थापन कर रहा हूं, जो लगातार होने की आवश्यकता है, जैसे

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb
sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb
sed -i 's/\.should/\.to/' t1_spec.rb 
sed -i 's/==/eq/' t1_spec.rb 

क्या ऐसा करने का एक बेहतर तरीका है जो केवल एक बार t1_spec.file से गुजरेगा और फ़ाइल के माध्यम से 4 बार जाने के बजाय प्रत्येक पंक्ति के लिए 4 प्रतिस्थापन करेगा?

जवाबों:


43

अर्धविरामों का उपयोग करने के अलावा, आप -eध्वज का उपयोग करके एक से अधिक एक्सप्रेशन भी दे सकते हैं :

sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/'  t1_spec.rb 

14

GNU में (उदाहरण के लिए मेरे उबंटू मशीन पर), बस कई लाइनों का उपयोग समर्थित है और अच्छी तरह से काम करता है और अच्छा लगता है (imho) क्योंकि यह सुपर लंबी लाइनों से बचा जाता है, जैसे

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/
        /expect(browser.*\.should/s/\.should/).should/
        s/\.should/\.to/
        s/==/eq/' t1_spec.rb 

5

आप एकल उद्धरणों के बीच अलग-अलग सबस्टेशनों को अलग करने के लिए अर्धविराम का उपयोग कर सकते हैं या आप उन सभी आदेशों को एक फ़ाइल में रख सकते हैं और फ़ाइल को -fविकल्प के साथ निर्दिष्ट कर सकते हैं sed

यदि आप sedबार-बार आदेशों के एक ही सेट का उपयोग करने जा रहे हैं, तो फ़ाइल का उपयोग करना विशेष रूप से उपयोगी है । मुझे एक गंदे डेटा फीड से जूझना पड़ता था और मैं समय के साथ 88 लाइन की फाइल के साथ समाप्त हो गया, जिसे massage.sedमुझे फीड से मिलने वाली अधिकांश सामान्य गलतियों को स्वचालित रूप से दूर करने के लिए कहा जाता था ।

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