शुरुआती गाइड टू सेड [लिनक्स]
Grep के बाद, अगला तार्किक कदम sed पर एक ट्यूटोरियल है। Sed कमांड स्ट्रीम संपादक से आता है, और जैसा कि इसका नाम इंगित करता है, यह टेक्स्ट प्रवाह से संबंधित है। हालांकि, अगर यूनिक्स यूनिक्स में सबसे शक्तिशाली आदेशों में से एक है, तो इसका मैनुअल पेज सबसे गूढ़ व्यक्ति भी है। मैं इस लेख में sed के सबसे बुनियादी उपयोग को सारांशित करने के लिए प्रयास करूंगा और फिर आपको उन्नत स्क्रिप्ट के कुछ उदाहरण दूंगा।
मूल बातें
Sed के लिए सामान्य आदेश कुछ ऐसा है:
sed [विकल्प] '{script}' [पाठ फ़ाइल]
सेड उन कार्यों को निष्पादित करेगा जिन्हें आप टेक्स्ट फ़ाइल पर करना चाहते हैं और परिणाम को मानक आउटपुट में प्रदर्शित करते हैं। यदि आप परिणाम को टेक्स्ट फ़ाइल में चाहते हैं, तो आप इसे आदत विधि के माध्यम से रीडायरेक्ट कर सकते हैं:
sed [विकल्प] '{script}' [टेक्स्ट फ़ाइल]> [संपादित टेक्स्ट फ़ाइल]
या विकल्प " -i
" का उपयोग करें जो इनपुट फ़ाइल को सीधे संपादित करेगा:
sed -i [विकल्प] '{script}' [पाठ फ़ाइल]
अब चलो स्क्रिप्ट पर काम करना शुरू करते हैं। सबसे स्पष्ट पहला कदम शून्य स्क्रिप्ट है:
sed '' test.txt
test.txt में टेक्स्ट प्रदर्शित करेगा।
Sed का एक अच्छा उपयोग हटाना है। आइए उदाहरणों के माध्यम से अभ्यास करें।
sed '2, 4 डी' test.txt
test.txt के 2 से 4 लाइनों को हटा देगा।
आप अनुमान लगा सकते हैं कि स्क्रिप्ट के लिए वाक्यविन्यास है:
sed '[हटाने के लिए पहली पंक्ति] [हटाने के लिए अंतिम पंक्ति] डी' test.txt
लेकिन फैंसी हिस्सा तब आता है जब आप नियमित अभिव्यक्तियों का उपयोग करते हैं, या regex, हटाने के लिए delimiter के रूप में। उदाहरण के लिए,
sed '/ ^ # / d' test.txt
"#" से शुरू होने वाली प्रत्येक पंक्ति को हटा देगा (दूसरे शब्दों में, यदि आप कोड करते हैं, तो यह आपकी सभी टिप्पणियों को हटा देगा)।
सामान्य वाक्यविन्यास है
sed '/ regex / d' test.txt
रेगेक्स युक्त रेखा को हटाने के लिए।
sed '/ regex1 /, / regex2 / d' test.txt
regex1 युक्त रेखा से अंतराल को हटाने के लिए regex2 युक्त रेखा में।
विशेष उदाहरण "^" जिसे मैंने पहले उदाहरण में उपयोग किया था, रेखा की शुरुआत को इंगित करना है।
फिर, दूसरा मूल उपयोग जिसे मैं सोच सकता हूं प्रतिस्थापन है। सामान्य वाक्यविन्यास है:
sed -re / regex1 / regex2 / 'test.txt
यह regex1 के लिए पहली पंक्ति में खोज करने के लिए प्रभावी होगा, इसे regex2 के साथ प्रतिस्थापित करें, अगली पंक्ति पर जाएं और प्रवेश प्रवाह के अंत तक दोहराएं।
एक अच्छा उदाहरण है:
sed -re / ^ # * // 'test.txt
यह रेखा की शुरुआत में "#" प्रतीक को प्रतिस्थापित करेगा, और सभी खाली रिक्त स्थान कुछ भी नहीं। दूसरे शब्दों में, यह पाठ फ़ाइल को विफल करता है। प्रतीक "*" एक मेटा-कैरेक्टर है जो यहां 0 या अधिक खाली रिक्त स्थान डिजाइन करता है।
उन्नत
आप sed के साथ कुछ सुंदर फैंसी सामान कर सकते हैं, लेकिन यदि आप अपने मूल व्यवहार पर ध्यान नहीं देते हैं तो आप सीमा तक तेजी से पहुंच जाएंगे। एसईडी प्रवाह के साथ प्रवाह से संबंधित है: यह एक पाठ फ़ाइल के लिए एक लाइन-बाय-लाइन उपचार लागू करता है। यदि आप एक ही पंक्ति में एक से अधिक संशोधन करना चाहते हैं, तो आपको लेबल और बहु-लाइन उपचार का उपयोग करना होगा। यह सब बहुत जटिल हो सकता है, बहुत जल्दी। अब मैं आपको कुछ उन्नत उदाहरण दिखाऊंगा और उन्हें आपको समझाऊंगा। यदि आप और चाहते हैं, तो मुझे यकीन है कि आप स्वयं से खोज सकते हैं और मैंने जो मूलभूत जानकारी दी है उसका उपयोग कर सकते हैं।
यदि आप किसी फ़ाइल की खाली रेखाओं को हटाना चाहते हैं, तो आप कमांड का उपयोग कर सकते हैं
sed -re '/ ^ $ / {एन; डी} 'test.txt
मेटा-कैरेक्टर "$" का मतलब रेखा का अंत है, इसलिए "^ $" एक खाली रेखा तैयार करता है। फिर, "{N; D}" उस पंक्ति को हटाने के लिए एक जटिल वाक्यविन्यास है।
अगर आप एचटीएमएल फाइल में हर टैग को मिटाना चाहते हैं, तो यह आपके लिए कमांड है:
sed -re ': शुरू करें /] *> // जी; /": स्टार्ट" को लेबल कहा जाता है। यह स्क्रिप्ट के भीतर एक टैग की तरह है कि हम एक ही पंक्ति में कई बदलावों को लागू करने के लिए बाद में वापस जाना चाहते हैं। sed "" (regex] *> के रूप में कुछ भी खोजता है) और इसे कुछ भी नहीं बदलता है, इसलिए लाइन का पहला HTML टैग हटा दिया जाता है। लेकिन फिर, अगली पंक्ति में जाने से पहले, यह जांचता है कि "<" से कुछ और शुरू होता है, और यदि वहां है, तो यह लेबल ": प्रारंभ" लेबल पर वापस जाता है और उपचार को फिर से लागू करता है।
निष्कर्ष
अब आप अधिक गहराई से अध्ययन करने के लिए तैयार हैं, या बस सरल संशोधन के लिए इसका इस्तेमाल करें। यह एक आदेश है जो मुझे विशेष रूप से स्क्रिप्ट में उपयोगी लगता है, लेकिन मुझे इसके वाक्यविन्यास को समझने में कुछ समय लगा। मुझे आशा है कि यह आपके लिए बहुत तेज़ होगा।
क्या आप sed के लिए एक और बुनियादी आदेश जानते हैं? या आप एक और उन्नत स्क्रिप्ट का उपयोग करते हैं जिसमें वह शामिल है जिसे आप साझा करना चाहते हैं? कृपया टिप्पणियों में हमें बताएं।