बैश में स्ट्रिंग हेरफेर को तोड़ना
शेल स्क्रिप्ट के साथ काम करते समय, एक सामान्य कार्य एक सीमांकक के आधार पर एक स्ट्रिंग को विभाजित करना है। उदाहरण के लिए, अर्धविराम से अलग किए गए ईमेल पते वाली एक स्ट्रिंग पर विचार करें। यदि आपको प्रत्येक ईमेल को व्यक्तिगत रूप से संसाधित करने की आवश्यकता है, तो यह समझना आवश्यक हो जाता है कि इस स्ट्रिंग को कैसे विभाजित किया जाए। यह आलेख बैश में इसे प्राप्त करने के लिए विभिन्न तरीकों के माध्यम से आपका मार्गदर्शन करेगा।
हम `tr` कमांड का उपयोग करने और आंतरिक फ़ील्ड सेपरेटर (IFS) में हेरफेर करने जैसे समाधान तलाशेंगे। अंत तक, आप स्ट्रिंग विभाजन को कुशलतापूर्वक संभालने और IFS को उसके डिफ़ॉल्ट मान पर रीसेट करने में सक्षम होंगे। आइए गहराई से जानें और अपने बैश स्क्रिप्टिंग कार्यों को सरल बनाएं!
| आज्ञा | विवरण |
|---|---|
| tr | वर्णों का अनुवाद करता है या हटाता है. स्ट्रिंग को विभाजित करने के लिए अर्धविराम को एक न्यूलाइन वर्ण से बदलने के लिए यहां उपयोग किया जाता है। |
| IFS | आंतरिक फ़ील्ड विभाजक, बैश स्क्रिप्ट में एक विशिष्ट सीमांकक के आधार पर स्ट्रिंग को विभाजित करने के लिए उपयोग किया जाता है। |
| read -r -a | इनपुट की एक पंक्ति को पढ़ता है और उसे एक सरणी में विभाजित करता है। -r विकल्प बैकस्लैश को एस्केप वर्णों के रूप में व्याख्या किए जाने से रोकता है। |
| echo | टेक्स्ट को मानक आउटपुट पर प्रिंट करता है। विभाजित स्ट्रिंग तत्वों को प्रदर्शित करने के लिए उपयोग किया जाता है। |
| split | एक पर्ल फ़ंक्शन जो एक स्ट्रिंग को एक निर्दिष्ट सीमांकक के आधार पर स्ट्रिंग्स की सूची में विभाजित करता है। |
| foreach | एक पर्ल लूप संरचना जो मानों की सूची पर पुनरावृत्त होती है। |
बैश स्ट्रिंग विभाजन तकनीकों को समझना
पहली बैश स्क्रिप्ट दर्शाती है कि स्ट्रिंग का उपयोग करके कैसे विभाजित किया जाए tr आज्ञा। यहां, हम एक स्ट्रिंग को परिभाषित करते हैं IN="bla@some.com;john@home.com" और उपयोग करें echo के साथ संयोजन के रूप में tr अर्धविराम सीमांकक को एक नई पंक्ति वर्ण में अनुवाद करने के लिए। यह प्रभावी ढंग से स्ट्रिंग को अलग-अलग पंक्तियों में तोड़ देता है। for लूप फिर प्रत्येक पंक्ति पर पुनरावृत्त होता है, पते को वर्गाकार कोष्ठक के भीतर प्रिंट करता है। यह विधि सीधी है और स्ट्रिंग्स में हेरफेर करने के लिए यूनिक्स कमांड की शक्तिशाली टेक्स्ट प्रोसेसिंग क्षमताओं का लाभ उठाती है।
एक अन्य विधि में समायोजन शामिल है Internal Field Separator (IFS). अस्थायी रूप से सेटिंग करके IFS अर्धविराम से, हम स्ट्रिंग को एक सरणी में विभाजित कर सकते हैं। हम मूल सहेजते हैं IFS को OIFS इसे संशोधित करने से पहले, यह सुनिश्चित कर लें कि हम इसे बाद में पुनर्स्थापित कर सकते हैं। read -r -a कमांड इनपुट स्ट्रिंग को एक ऐरे में पढ़ता है जिसे कहा जाता है mails2, इसे संशोधित के आधार पर विभाजित करना IFS. प्रसंस्करण के बाद, मूल IFS बहाल कर दिया गया है. यह दृष्टिकोण बैश में स्ट्रिंग विभाजन को संभालने के लिए एक अधिक प्रोग्रामेटिक तरीका प्रदान करता है, जिससे हमें आगे के हेरफेर के लिए सरणियों का उपयोग करने की अनुमति मिलती है।
डिलीमीटर पर स्ट्रिंग्स को विभाजित करने के लिए बैश का उपयोग करना
बैश स्क्रिप्ट
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Split string using 'tr' and iteratemails=$(echo $IN | tr ";" "\n")for addr in $mails; doecho "> [$addr]"done# Output:# > [bla@some.com]# > [john@home.com]
IFS का उपयोग करके बैश में एक स्ट्रिंग को विभाजित करना
बैश स्क्रिप्ट
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Save the original IFSOIFS=$IFS# Set IFS to semicolonIFS=';'# Split string into an arrayread -r -a mails2 <<< "$IN"# Restore the original IFSIFS=$OIFS# Iterate over the arrayfor x in "${mails2[@]}"; doecho "> [$x]"done# Output:# > [bla@some.com]# > [john@home.com]
स्ट्रिंग स्प्लिटिंग के लिए पायथन का उपयोग करना
पायथन स्क्रिप्ट
#!/usr/bin/env python3# Input stringIN = "bla@some.com;john@home.com"# Split string by semicolonmails = IN.split(';')# Iterate and print each elementfor addr in mails:print(f"> [{addr}]")# Output:# > [bla@some.com]# > [john@home.com]
एक स्ट्रिंग को विभाजित करने के लिए पर्ल का उपयोग करना
पर्ल स्क्रिप्ट
#!/usr/bin/env perluse strict;use warnings;# Input stringmy $IN = "bla@some.com;john@home.com";# Split string by semicolonmy @mails = split(';', $IN);# Iterate and print each elementforeach my $addr (@mails) {print "> [$addr]\n";}# Output:# > [bla@some.com]# > [john@home.com]
बैश में उन्नत स्ट्रिंग विभाजन तकनीकें
बैश में स्ट्रिंग्स को विभाजित करने की एक और शक्तिशाली विधि में इसका उपयोग करना शामिल है awk आज्ञा। awk पैटर्न स्कैनिंग और प्रोसेसिंग के लिए डिज़ाइन की गई एक बहुमुखी कमांड-लाइन उपयोगिता है। यह स्ट्रिंग्स को विभाजित करने के लिए विशेष रूप से उपयोगी हो सकता है क्योंकि यह हमें कस्टम फ़ील्ड विभाजकों को परिभाषित करने की अनुमति देता है। उदाहरण के लिए, हम उपयोग कर सकते हैं awk -F";" '{print $1, $2}' अर्धविराम सीमांकक के आधार पर एक स्ट्रिंग को विभाजित करने और अलग-अलग घटकों को प्रिंट करने के लिए। यह विधि अत्यधिक लचीली है और अधिक जटिल स्ट्रिंग हेरफेर कार्यों को संभाल सकती है, जिससे यह बैश प्रोग्रामर के टूलकिट में एक मूल्यवान उपकरण बन जाता है।
इसके अतिरिक्त, cut कमांड का उपयोग सीमांकक के आधार पर स्ट्रिंग को विभाजित करने के लिए किया जा सकता है। cut कमांड का उपयोग आम तौर पर इनपुट डेटा की प्रत्येक पंक्ति से अनुभाग निकालने के लिए किया जाता है। के साथ एक सीमांकक निर्दिष्ट करके -d विकल्प और फ़ील्ड का चयन करें -f विकल्प, हम कुशलतापूर्वक एक स्ट्रिंग के हिस्सों को विभाजित और निकाल सकते हैं। उदाहरण के लिए, का उपयोग करना echo $IN | cut -d';' -f1 इनपुट स्ट्रिंग से पहला ईमेल पता निकालेगा। ये उन्नत विधियाँ बैश में स्ट्रिंग हेरफेर कार्यों के लिए अधिक नियंत्रण और सटीकता प्रदान करती हैं।
बैश में स्ट्रिंग विभाजन के बारे में सामान्य प्रश्न और उत्तर
- मैं बैश में एक डिलीमीटर पर एक स्ट्रिंग को कैसे विभाजित करूं?
- आप इसका उपयोग कर सकते हैं IFS वैरिएबल या कमांड जैसे tr, awk, और cut एक सीमांकक पर स्ट्रिंग को विभाजित करने के लिए।
- क्या है IFS बैश में परिवर्तनीय?
- IFS (आंतरिक फ़ील्ड विभाजक) एक विशेष चर है जो इनपुट टेक्स्ट को शब्दों या टोकन में विभाजित करने के लिए उपयोग किए जाने वाले वर्णों को परिभाषित करता है।
- मैं इसे कैसे रीसेट कर सकता हूं IFS परिवर्तनीय को उसके डिफ़ॉल्ट मान में बदलें?
- मूल सहेजें IFS इसे बदलने से पहले मूल्य दें, और प्रसंस्करण के बाद इसे पुनर्स्थापित करें: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- क्या करता है tr स्ट्रिंग विभाजन में कमांड क्या करते हैं?
- tr कमांड वर्णों का अनुवाद करता है या हटाता है। यह एक स्ट्रिंग को विभाजित करने के लिए डिलीमीटर को न्यूलाइन से बदल सकता है: echo $IN | tr ";" "\n".
- क्या मैं बैश का उपयोग करके एक स्ट्रिंग को एक सरणी में विभाजित कर सकता हूँ?
- हाँ, बदलकर IFS परिवर्तनशील और प्रयोग करने योग्य read -r -a, आप एक स्ट्रिंग को एक सरणी में विभाजित कर सकते हैं: read -r -a array <<< "$string".
- क्या है awk कमांड का उपयोग किसके लिए किया जाता है?
- awk पैटर्न स्कैनिंग और प्रोसेसिंग के लिए एक कमांड-लाइन उपयोगिता है। यह कस्टम फ़ील्ड सेपरेटर को परिभाषित करके स्ट्रिंग्स को विभाजित कर सकता है।
- कैसे करता है cut आदेश कार्य?
- cut कमांड इनपुट की प्रत्येक पंक्ति से अनुभाग निकालता है। यह एक सीमांकक निर्दिष्ट करके और फ़ील्ड का चयन करके स्ट्रिंग को विभाजित कर सकता है: echo $string | cut -d';' -f1.
- क्यों उपयोग कर रहा है IFS स्ट्रिंग विभाजन में सहायक?
- का उपयोग करते हुए IFS आपको स्ट्रिंग्स को विभाजित करने के लिए कस्टम डिलीमीटर को परिभाषित करने की अनुमति देता है, जो इसे विभिन्न इनपुट प्रारूपों के लिए बहुमुखी बनाता है।
- क्या बैश में एक स्ट्रिंग को एकाधिक सीमांकक द्वारा विभाजित करना संभव है?
- हाँ, आप इनके संयोजन का उपयोग कर सकते हैं tr और awk एकाधिक सीमांकक को संभालने के लिए।
- क्या मैं उपयोग कर सकता हूँ sed बैश में स्ट्रिंग विभाजन के लिए?
- जबकि sed यह मुख्य रूप से एक स्ट्रीम एडिटर है, इसे अन्य कमांड्स के साथ जोड़ा जा सकता है awk तारों को अप्रत्यक्ष रूप से विभाजित करना।
बैश में स्ट्रिंग विभाजन पर अंतिम विचार
बैश में स्ट्रिंग हेरफेर में महारत हासिल करने से आपकी स्क्रिप्टिंग दक्षता में काफी सुधार हो सकता है। चाहे उपयोग कर रहे हों IFS सरल सीमांकक या अधिक उन्नत उपकरणों जैसे के लिए tr और awkप्रभावी बैश प्रोग्रामिंग के लिए ये तकनीकें आवश्यक हैं। हमेशा मूल को पुनर्स्थापित करना याद रखें IFS अपनी स्क्रिप्ट में अप्रत्याशित व्यवहार से बचने के लिए। इन विधियों से, आप अपनी बैश स्क्रिप्ट में स्ट्रिंग प्रोसेसिंग कार्यों की एक विस्तृत श्रृंखला को संभाल सकते हैं।