अगर बैज में क्लॉज है तो रेगेक्स का उपयोग करना


10

इसे देखें यदि ब्लॉक करें:

#!/bin/bash

str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
    echo "matched"
else
    echo "not matched"
    exit 1
fi

exit 0

यह "मिलान" प्रिंट करना चाहिए, लेकिन यह नहीं है। मुझसे कहां गलती हो रही है?

जवाबों:


21

रेगेक्स मैच में आपको कोटेशन निकालने की जरूरत है।

if [[ ${str} =~ m\.m ]]; then

बैश मैन पेज से:

[...] एक अतिरिक्त बाइनरी ऑपरेटर, = ~, उपलब्ध है, जैसा कि पूर्व = = और! = के साथ है। जब इसका उपयोग किया जाता है, तो ऑपरेटर के दाईं ओर के स्ट्रिंग को एक विस्तारित नियमित एक्सरे सायन माना जाता है और तदनुसार मिलान किया जाता है (जैसा कि रेगेक्स (3) में)। वापसी मान 0 है यदि स्ट्रिंग पैटर्न से मेल खाती है, और 1 अन्यथा। यदि नियमित अभिव्यक्ति वाक्यविन्यास रूप से गलत है, तो सशर्त अभिव्यक्ति का रिटर्न मान 2 है। यदि शेल विकल्प nocasematch सक्षम है, तो मैच अक्षर वर्णों के मामले के बिना किया जाता है। पैटर्न के किसी भी हिस्से को स्ट्रिंग के रूप में मिलान करने के लिए मजबूर करने के लिए उद्धृत किया जा सकता है।

तो उद्धरण के साथ, आप अच्छे-पुराने स्ट्रिंग मिलान का उपयोग कर रहे हैं।

यदि आपको पैटर्न में स्थान की आवश्यकता है, तो बस उनसे बच जाएं:

str="m   m"
if [[ ${str} =~ m\ +m ]]; then

लेकिन कोई दोहरे उद्धरण के साथ, हम रेगेक्स पैटर्न में अंतरिक्ष चरित्र का उपयोग नहीं कर सकते हैं। क्या इसका कोई हल है?
माजिद आज़मी

1
अंतरिक्ष की तरह बच जाना चाहिए \
ДМИТРИЙ МАЛИКОВ

अगर मैं एक स्ट्रिंग ढूंढना चाहता हूं, जो डायनेमिक नंबर के साथ समाप्त होती है, तो ${str} =~ "needle"[0-9]{1}क्या मुझे इसका उपयोग करना चाहिए या क्या करना चाहिए ${str} =~ needle[0-9]{1}?
एमगुटैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.