बैश में स्ट्रिंग हेरफेर को तोड़ना
शेल स्क्रिप्ट के साथ काम करते समय, एक सामान्य कार्य एक सीमांकक के आधार पर एक स्ट्रिंग को विभाजित करना है। उदाहरण के लिए, अर्धविराम से अलग किए गए ईमेल पते वाली एक स्ट्रिंग पर विचार करें। यदि आपको प्रत्येक ईमेल को व्यक्तिगत रूप से संसाधित करने की आवश्यकता है, तो यह समझना आवश्यक हो जाता है कि इस स्ट्रिंग को कैसे विभाजित किया जाए। यह आलेख बैश में इसे प्राप्त करने के लिए विभिन्न तरीकों के माध्यम से आपका मार्गदर्शन करेगा।
हम `tr` कमांड का उपयोग करने और आंतरिक फ़ील्ड सेपरेटर (IFS) में हेरफेर करने जैसे समाधान तलाशेंगे। अंत तक, आप स्ट्रिंग विभाजन को कुशलतापूर्वक संभालने और IFS को उसके डिफ़ॉल्ट मान पर रीसेट करने में सक्षम होंगे। आइए गहराई से जानें और अपने बैश स्क्रिप्टिंग कार्यों को सरल बनाएं!
| आज्ञा | विवरण |
|---|---|
| tr | वर्णों का अनुवाद करता है या हटाता है. स्ट्रिंग को विभाजित करने के लिए अर्धविराम को एक न्यूलाइन वर्ण से बदलने के लिए यहां उपयोग किया जाता है। |
| IFS | आंतरिक फ़ील्ड विभाजक, बैश स्क्रिप्ट में एक विशिष्ट सीमांकक के आधार पर स्ट्रिंग को विभाजित करने के लिए उपयोग किया जाता है। |
| read -r -a | इनपुट की एक पंक्ति को पढ़ता है और उसे एक सरणी में विभाजित करता है। -r विकल्प बैकस्लैश को एस्केप वर्णों के रूप में व्याख्या किए जाने से रोकता है। |
| echo | टेक्स्ट को मानक आउटपुट पर प्रिंट करता है। विभाजित स्ट्रिंग तत्वों को प्रदर्शित करने के लिए उपयोग किया जाता है। |
| split | एक पर्ल फ़ंक्शन जो एक स्ट्रिंग को एक निर्दिष्ट सीमांकक के आधार पर स्ट्रिंग्स की सूची में विभाजित करता है। |
| foreach | एक पर्ल लूप संरचना जो मानों की सूची पर पुनरावृत्त होती है। |
बैश स्ट्रिंग विभाजन तकनीकों को समझना
पहली बैश स्क्रिप्ट दर्शाती है कि स्ट्रिंग का उपयोग करके कैसे विभाजित किया जाए आज्ञा। यहां, हम एक स्ट्रिंग को परिभाषित करते हैं और उपयोग करें के साथ संयोजन के रूप में tr अर्धविराम सीमांकक को एक नई पंक्ति वर्ण में अनुवाद करने के लिए। यह प्रभावी ढंग से स्ट्रिंग को अलग-अलग पंक्तियों में तोड़ देता है। लूप फिर प्रत्येक पंक्ति पर पुनरावृत्त होता है, पते को वर्गाकार कोष्ठक के भीतर प्रिंट करता है। यह विधि सीधी है और स्ट्रिंग्स में हेरफेर करने के लिए यूनिक्स कमांड की शक्तिशाली टेक्स्ट प्रोसेसिंग क्षमताओं का लाभ उठाती है।
एक अन्य विधि में समायोजन शामिल है . अस्थायी रूप से सेटिंग करके अर्धविराम से, हम स्ट्रिंग को एक सरणी में विभाजित कर सकते हैं। हम मूल सहेजते हैं को OIFS इसे संशोधित करने से पहले, यह सुनिश्चित कर लें कि हम इसे बाद में पुनर्स्थापित कर सकते हैं। कमांड इनपुट स्ट्रिंग को एक ऐरे में पढ़ता है जिसे कहा जाता है , इसे संशोधित के आधार पर विभाजित करना . प्रसंस्करण के बाद, मूल 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]
बैश में उन्नत स्ट्रिंग विभाजन तकनीकें
बैश में स्ट्रिंग्स को विभाजित करने की एक और शक्तिशाली विधि में इसका उपयोग करना शामिल है आज्ञा। पैटर्न स्कैनिंग और प्रोसेसिंग के लिए डिज़ाइन की गई एक बहुमुखी कमांड-लाइन उपयोगिता है। यह स्ट्रिंग्स को विभाजित करने के लिए विशेष रूप से उपयोगी हो सकता है क्योंकि यह हमें कस्टम फ़ील्ड विभाजकों को परिभाषित करने की अनुमति देता है। उदाहरण के लिए, हम उपयोग कर सकते हैं अर्धविराम सीमांकक के आधार पर एक स्ट्रिंग को विभाजित करने और अलग-अलग घटकों को प्रिंट करने के लिए। यह विधि अत्यधिक लचीली है और अधिक जटिल स्ट्रिंग हेरफेर कार्यों को संभाल सकती है, जिससे यह बैश प्रोग्रामर के टूलकिट में एक मूल्यवान उपकरण बन जाता है।
इसके अतिरिक्त, कमांड का उपयोग सीमांकक के आधार पर स्ट्रिंग को विभाजित करने के लिए किया जा सकता है। कमांड का उपयोग आम तौर पर इनपुट डेटा की प्रत्येक पंक्ति से अनुभाग निकालने के लिए किया जाता है। के साथ एक सीमांकक निर्दिष्ट करके विकल्प और फ़ील्ड का चयन करें -f विकल्प, हम कुशलतापूर्वक एक स्ट्रिंग के हिस्सों को विभाजित और निकाल सकते हैं। उदाहरण के लिए, का उपयोग करना इनपुट स्ट्रिंग से पहला ईमेल पता निकालेगा। ये उन्नत विधियाँ बैश में स्ट्रिंग हेरफेर कार्यों के लिए अधिक नियंत्रण और सटीकता प्रदान करती हैं।
- मैं बैश में एक डिलीमीटर पर एक स्ट्रिंग को कैसे विभाजित करूं?
- आप इसका उपयोग कर सकते हैं वैरिएबल या कमांड जैसे , , और cut एक सीमांकक पर स्ट्रिंग को विभाजित करने के लिए।
- क्या है बैश में परिवर्तनीय?
- (आंतरिक फ़ील्ड विभाजक) एक विशेष चर है जो इनपुट टेक्स्ट को शब्दों या टोकन में विभाजित करने के लिए उपयोग किए जाने वाले वर्णों को परिभाषित करता है।
- मैं इसे कैसे रीसेट कर सकता हूं परिवर्तनीय को उसके डिफ़ॉल्ट मान में बदलें?
- मूल सहेजें इसे बदलने से पहले मूल्य दें, और प्रसंस्करण के बाद इसे पुनर्स्थापित करें: .
- क्या करता है स्ट्रिंग विभाजन में कमांड क्या करते हैं?
- कमांड वर्णों का अनुवाद करता है या हटाता है। यह एक स्ट्रिंग को विभाजित करने के लिए डिलीमीटर को न्यूलाइन से बदल सकता है: .
- क्या मैं बैश का उपयोग करके एक स्ट्रिंग को एक सरणी में विभाजित कर सकता हूँ?
- हाँ, बदलकर परिवर्तनशील और प्रयोग करने योग्य , आप एक स्ट्रिंग को एक सरणी में विभाजित कर सकते हैं:
- क्या है कमांड का उपयोग किसके लिए किया जाता है?
- पैटर्न स्कैनिंग और प्रोसेसिंग के लिए एक कमांड-लाइन उपयोगिता है। यह कस्टम फ़ील्ड सेपरेटर को परिभाषित करके स्ट्रिंग्स को विभाजित कर सकता है।
- कैसे करता है आदेश कार्य?
- कमांड इनपुट की प्रत्येक पंक्ति से अनुभाग निकालता है। यह एक सीमांकक निर्दिष्ट करके और फ़ील्ड का चयन करके स्ट्रिंग को विभाजित कर सकता है: .
- क्यों उपयोग कर रहा है स्ट्रिंग विभाजन में सहायक?
- का उपयोग करते हुए आपको स्ट्रिंग्स को विभाजित करने के लिए कस्टम डिलीमीटर को परिभाषित करने की अनुमति देता है, जो इसे विभिन्न इनपुट प्रारूपों के लिए बहुमुखी बनाता है।
- क्या बैश में एक स्ट्रिंग को एकाधिक सीमांकक द्वारा विभाजित करना संभव है?
- हाँ, आप इनके संयोजन का उपयोग कर सकते हैं और एकाधिक सीमांकक को संभालने के लिए।
- क्या मैं उपयोग कर सकता हूँ बैश में स्ट्रिंग विभाजन के लिए?
- जबकि यह मुख्य रूप से एक स्ट्रीम एडिटर है, इसे अन्य कमांड्स के साथ जोड़ा जा सकता है तारों को अप्रत्यक्ष रूप से विभाजित करना।
बैश में स्ट्रिंग हेरफेर में महारत हासिल करने से आपकी स्क्रिप्टिंग दक्षता में काफी सुधार हो सकता है। चाहे उपयोग कर रहे हों सरल सीमांकक या अधिक उन्नत उपकरणों जैसे के लिए और प्रभावी बैश प्रोग्रामिंग के लिए ये तकनीकें आवश्यक हैं। हमेशा मूल को पुनर्स्थापित करना याद रखें IFS अपनी स्क्रिप्ट में अप्रत्याशित व्यवहार से बचने के लिए। इन विधियों से, आप अपनी बैश स्क्रिप्ट में स्ट्रिंग प्रोसेसिंग कार्यों की एक विस्तृत श्रृंखला को संभाल सकते हैं।