Bash Scripting

Bash में पैटर्न मिलान में महारथ

Spread the love

=~ ऑपरेटर के साथ नियमित अभिव्यक्तियाँ

Bash का =~ ऑपरेटर शक्तिशाली नियमित अभिव्यक्ति मिलान को सक्षम बनाता है। नियमित अभिव्यक्तियाँ साधारण वाइल्डकार्ड मिलान की तुलना में कहीं अधिक लचीलापन प्रदान करती हैं, जिससे आप स्ट्रिंग हेरफेर और सत्यापन के लिए जटिल पैटर्न परिभाषित कर सकते हैं। यदि बाईं ओर का स्ट्रिंग दाईं ओर की नियमित अभिव्यक्ति से मेल खाता है, तो ऑपरेटर सही देता है, जिसे जरूर दोहरे उद्धरण चिह्नों में संलग्न किया जाना चाहिए।


string="This is a test string with 123 digits"

if [[ "$string" =~ "test" ]]; then
  echo "The string contains 'test'"
fi

if [[ "$string" =~ "string$" ]]; then  # $ स्ट्रिंग के अंत से मेल खाता है
  echo "The string ends with 'string'"
fi

if [[ "$string" =~ "[0-9]+" ]]; then  # एक या अधिक अंकों से मेल खाता है
  echo "The string contains digits"
fi

if [[ "$string" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$ ]]; then
  echo "The string looks like an email address"
fi
  

उपरोक्त उदाहरण बुनियादी नियमित अभिव्यक्ति उपयोग दर्शाते हैं। अधिक जटिल पैटर्न के लिए, एक व्यापक नियमित अभिव्यक्ति ट्यूटोरियल या संदर्भ देखें। नियमित अभिव्यक्तियों का लचीलापन उन्हें ईमेल पते, आईपी पते या स्ट्रिंग के भीतर अन्य संरचित डेटा को मान्य करने जैसे कार्यों के लिए आदर्श बनाता है।

* ऑपरेटर के साथ वाइल्डकार्ड मिलान

नियमित अभिव्यक्तियों की तुलना में सरल * वाइल्डकार्ड, शून्य या अधिक वर्णों से मेल खाता है। यह अक्सर फ़ाइल ग्लोबिंग और बुनियादी सशर्त जांच में उपयोग किया जाता है। कम शक्तिशाली होने के बावजूद, यह सरल परिदृश्यों के लिए कुशल है।


files=(*.txt)  # सभी .txt फ़ाइलों की सूची में विस्तारित होता है

if [[ "$filename" == "*.log" ]]; then
  echo "यह एक लॉग फ़ाइल है"
fi

if [[ "$variable" == "pre*suf" ]]; then
  echo "चर 'pre' से शुरू होता है और 'suf' से समाप्त होता है"
fi
  

पहला उदाहरण फ़ाइल ग्लोबिंग दिखाता है; अन्य सशर्त कथनों के भीतर बुनियादी पैटर्न मिलान प्रदर्शित करते हैं। ध्यान दें कि वाइल्डकार्ड मिलान के लिए ==, =~ नहीं, का उपयोग किया जाता है।

उप-पैटर्न निकालना

नियमित अभिव्यक्तियाँ और वाइल्डकार्ड दोनों मिलान स्ट्रिंग के कुछ हिस्सों को निकाल सकते हैं, हालाँकि विधियाँ काफी भिन्न हैं।

नियमित अभिव्यक्तियाँ (=~ के साथ)

नियमित अभिव्यक्तियाँ मिलान स्ट्रिंग के विशिष्ट भागों को अलग करने के लिए कोष्ठक () से परिभाषित कैप्चरिंग समूहों का उपयोग करती हैं। ये कैप्चर किए गए समूह BASH_REMATCH सरणी के माध्यम से पहुँचे जा सकते हैं।


string="My user ID is 12345"
if [[ "$string" =~ "ID is ([0-9]+)" ]]; then
  user_id="${BASH_REMATCH[1]}"
  echo "User ID: $user_id"
fi
  

([0-9]+) एक या अधिक अंकों को कैप्चर करता है, जिसे ${BASH_REMATCH[1]} में संग्रहीत किया जाता है।

वाइल्डकार्ड (* के साथ)

वाइल्डकार्ड मिलान सीधे उप-पैटर्न निष्कर्षण का समर्थन नहीं करता है। इसके बजाय, आपको बुनियादी मिलान के बाद स्ट्रिंग हेरफेर तकनीकों की आवश्यकता है।


filename="my_report_2024-10-26.txt"
if [[ "$filename" == "my_report_*.txt" ]]; then
  date="${filename%.*}"  # '.txt' एक्सटेंशन निकालें
  date="${date##*_}"     # अंतिम '_' से पहले सब कुछ निकालें
  echo "Report date: $date"
fi
  

यह उदाहरण सरल परिदृश्यों के लिए कम सुंदर लेकिन प्रभावी दृष्टिकोण का प्रदर्शन करते हुए, उप-पैटर्न निष्कर्षण प्राप्त करने के लिए पैरामीटर विस्तार का उपयोग करता है।

Bash बहुमुखी पैटर्न-मिलान क्षमताएँ प्रदान करता है। अपनी आवश्यकताओं के अनुसार सबसे उपयुक्त विधि—नियमित अभिव्यक्तियाँ या वाइल्डकार्ड—चुनें, शक्ति और सादगी को संतुलित करें।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *