यह मार्गदर्शिका आपको बताएगी कि लिनक्स का उपयोग करते समय फाइलों और निर्देशिकाओं में शब्दों, स्ट्रिंग्स या वाक्यांशों को कैसे खोजें और बदलें।
जब आप लिनक्स कमांड लाइन पर काम कर रहे होते हैं और आपके सामने एक बड़ी फाइल या बड़ी संख्या में फाइलें आती हैं, जिसमें आपको एक निश्चित टेक्स्ट को दूसरे टेक्स्ट से बदलने की जरूरत होती है, तो टेक्स्ट के प्रत्येक इंस्टेंस को खोजने और चिपकाने में थोड़ा समय लग सकता है। खैर, अब और चिंता न करें। लिनक्स के पास आपके लिए सिर्फ समाधान है। एक या अधिक फ़ाइलों में टेक्स्ट की एक स्ट्रिंग को स्वचालित रूप से खोजने और बदलने का एक तरीका यहां दिया गया है।
इस अभ्यास के प्रयोजन के लिए हम "sed" नामक एक Linux कमांड लाइन टूल का उपयोग करेंगे। "सेड" एक बहुत शक्तिशाली और बहुमुखी उपकरण है, और इसकी क्षमताओं के बारे में बहुत कुछ लिखा जा सकता है। हम यहां "sed" के बहुत सीमित पहलू का उपयोग कर रहे हैं। मैं निश्चित रूप से अनुशंसा करता हूं कि यदि आप इसके इस पहलू को दिलचस्प पाते हैं तो आप "sed" पर थोड़ा और पढ़ लें।
हम फ़ाइल में टेक्स्ट की एक स्ट्रिंग को खोजने और बदलने के लिए निम्नलिखित सिंटैक्स का उपयोग करने जा रहे हैं:
# sed -i 's/[orginal_text]/[new_text]/' filename.txt
मान लें कि आपके पास "database.txt" नामक एक फ़ाइल है जिसमें आपके डेटाबेस सर्वर के आईपी पते के कई उदाहरण हैं। आपने अभी एक नए डेटाबेस सर्वर पर स्विच किया है और इसे नए सर्वर के आईपी पते के साथ अपडेट करने की आवश्यकता है। पुराना IP पता 192.168.1.16 है और नया 192.168.1.22 है। यहां बताया गया है कि आप इसके बारे में कैसे जाते हैं:
# बिल्ली डेटाबेस.txt
LOCAL_DATABASE =192.168.1.16
LOCAL_DIR =/home/calvin/
PROD_DB =192.168.1.16
# sed -i 's/192.168.1.16/192.168.1.22/g' database.txt
# cdatabase.txt पर
LOCAL_DATABASE =192.168.1.22
LOCAL_DIR =/home/calvin/
PROD_DB =192.168.1.22
अब फ़ाइल “database.inc” खोलें और यह देखने के लिए जांचें कि क्या नया IP पता आपके पुराने पते की जगह ले लिया गया है। यहाँ उपरोक्त आदेश का गोलमाल है। सबसे पहले आप "sed" कमांड को कॉल करें। फिर आप इसे "-s" पैरामीटर पास करते हैं जो "के स्थान पर" के लिए खड़ा है। अब हम कुछ रेगुलर एक्सप्रेशन का उपयोग करते हैं, जिन्हें आमतौर पर अगले बिट के लिए "रेगेक्स" के रूप में जाना जाता है। उद्धृत स्ट्रिंग में "s" का अर्थ "विकल्प" है, और अंत में "g" का अर्थ "वैश्विक" है। उनके बीच वे "आपके द्वारा उनके बीच रखे गए पाठ की स्ट्रिंग का वैश्विक प्रतिस्थापन" करते हैं।
आप वैकल्पिक रूप से अंत में "g" को छोड़ सकते हैं। इसका मतलब है कि प्रतिस्थापन वैश्विक नहीं होगा, जो व्यावहारिक रूप से एक पंक्ति में स्ट्रिंग के केवल पहले उदाहरण के प्रतिस्थापन के लिए अनुवाद करता है। इसलिए यदि आपके पास उस पाठ के कई उदाहरणों के साथ एक पंक्ति है जिसे आप बदलने का प्रयास कर रहे हैं, तो यहां बताया गया है कि क्या होगा
# बिल्ली डेटाबेस.txt
LOCAL_DATABASE =192.168.1.16
LOCAL_DIR =/home/calvin/
PROD_DB =192.168.1.16, 192.168.1.16
# sed -i 's/192.168.1.16/192.168.1.22/' database.txt
# बिल्ली डेटाबेस.txt
LOCAL_DATABASE =192.168.1.22
LOCAL_DIR =/home/calvin/
PROD_DB =192.168.1.22, 192.168.1.16
यहाँ असली जादू आता है। अब, मान लें कि आप टेक्स्ट की एक स्ट्रिंग को न केवल एक फ़ाइल में, बल्कि उस संपूर्ण निर्देशिका में बदलना चाहते हैं, जिसमें आप हैं। कई टेक्स्ट फ़ाइलें हैं जिनमें आपको "वाइन" को "शैंपेन" के साथ खोजने और बदलने की आवश्यकता है। ।
# ढूंढें। -मैक्सडेप्थ 1-नाम "*.txt" -टाइप f -exec sed -i 's/wine/शैम्पेन/' {} \
हम वर्तमान निर्देशिका में सभी पाठ फ़ाइलों की सूची प्राप्त करने के लिए खोज कमांड का उपयोग करते हैं। वह है "ढूंढें। -मैक्सडेप्थ 1-नाम "*.txt" -टाइप f" भाग। "पाना । मैक्सडेप 1" कंप्यूटर को वर्तमान निर्देशिका में देखने के लिए कहता है और वर्तमान निर्देशिका से अधिक गहराई तक नहीं जाता है। '-नाम “*.txt”’ भाग बताता है कि केवल “.txt” एक्सटेंशन वाली फाइलों को सूचीबद्ध करें। फिर "-टाइप एफ" खंड निर्दिष्ट करता है कि "ढूंढें" को केवल बिल्कुल मेल खाने वाली फाइलों को चुनना चाहिए। अंत में "-exec" भाग निम्नलिखित कमांड को निष्पादित करने के लिए "ढूंढें" बताता है, जो इस मामले में, टेक्स्ट को बदलने के लिए "sed" कमांड है - "sed -i 's/wine/शैम्पेन/' {} \ .
अब जब आप फाइलों में चीजों को ढूंढ और बदल सकते हैं, तो क्यों न हमारी अन्य लिनक्स युक्तियों को देखें :)