एक में सभी लाइनों संलग्न करने के लिए मुझे क्या होता है महान रेखा और सामग्री को प्रतिस्थापित करें।
$ cat f
import java.io.File;
import java.io.File;
$ sed -n 'N
${
s/import java.io.File;/import java.io.IOException/
p
}' f
import java.io.IOException
import java.io.File;
यह कैसे काम करता है: पहला, मैं लाइन मुद्रण, जो डिफ़ॉल्ट व्यवहार है, SED को -n
विकल्प गुजर दबाने।
फिर sed commandss आता है।पहला वाला N
कमांड है: यह पैटर्न की जगह पर बनाए रखने के लिए वर्तमान की ओर एक नई लाइन और स्ट्रीम की अगली पंक्ति जोड़ता है। यह वर्तमान पंक्ति को अगले में बदल देगा, और फिर अगली पंक्ति को फ़ाइल के अंत तक जोड़ा जाएगा ...।
फ़ाइल के अंत में और N
आदेश के बाद अंतिम पंक्ति पर निष्पादित करने के लिए, पैटर्न स्थान में सभी पंक्तियां होंगी। फिर, फ़ाइल के अंत (जो $
पते के द्वारा निर्दिष्ट किया जाता) पर हम सिर्फ साथ वांछित लाइन को बदल दें:
s/import java.io.File;/import java.io.IOException/
के बाद से s///
आदेश डिफ़ॉल्ट रूप से पैटर्न अंतरिक्ष में यात्रा के लिए केवल एक प्रतिस्थापन करता है, यह केवल पहली पंक्ति को बदल देगा। अब पैटर्न स्पेस में लाइन बदल दी गई है, लेकिन प्रिंट नहीं किया जाएगा क्योंकि हमने -n
विकल्प का उपयोग किया था। इसलिए, हमें p
कमांड के साथ इसे प्रिंट करने की आवश्यकता है। एक बार जब हम फ़ाइल के अंत में दो संचालन निष्पादित करेंगे, तो हम इसे $
से संबोधित करेंगे और संचालन को ब्रैकेट्स ({}
) के बीच रखें।
वहां, हमने स्पष्टता के लिए एक से अधिक पंक्तियों में सिर्फ sed आदेश प्रस्तुत किए। हम उन्हें एक ही पंक्ति में उपयोग कर सकते हैं; बस अर्धविराम से उन्हें अलग: [? कैसे एसईडी उपयोग करने के लिए एक फ़ाइल में केवल पहली घटना को बदलने के लिए]
$ sed -n 'N;${s/import java.io.File;/import java.io.IOException/;p;}' f
import java.io.IOException
import java.io.File;
HTH
के संभावित डुप्लिकेट (http://stackoverflow.com/questions/148451/how करने के लिए उपयोग-sed करने वाली की जगह-केवल-पहली घटना में एक-फाइल) –