मैंने पाया कि echo file|grep fil*
विफल रहता है, लेकिन echo abcd|grep abc*
सफल होता है।
मुझे यह समझ में नहीं आता, क्या कोई समझा सकता है?
मैंने पाया कि echo file|grep fil*
विफल रहता है, लेकिन echo abcd|grep abc*
सफल होता है।
मुझे यह समझ में नहीं आता, क्या कोई समझा सकता है?
जवाबों:
आपके उदाहरण के साथ दो समस्याएं हैं।
प्राथमिक एक आप यह सोचते हैं कि कर रहे हैं वह यह है कि नियमित अभिव्यक्ति के रूप में ही काम करते हैं ग्लोब पैटर्न में है कि *
एक वाइल्डकार्ड अर्थ है "वर्णों के किसी अनुक्रम।" नियमित अभिव्यक्ति में, *
साधन के बजाय "पिछले परमाणु के किसी भी संख्या", तो fil*
इसका मतलब है f
जिसके बाद i
शून्य या अधिक के बाद l
पात्रों। आपको grep fil.*
अपेक्षित अर्थ प्राप्त करने के लिए कहने की आवश्यकता है: .
"कोई भी एकल वर्ण, इसलिए .*
इसका अर्थ है" वर्णों का कोई भी क्रम। "
कम समस्या यह है कि आप बिना किसी विशेष वर्ण का उपयोग कर रहे हैं, जिसका अर्थ ग्लोब नियमों के तहत कुछ है, जिसका अर्थ है कि शेल उन्हें व्याख्या कर सकता है। यदि आपके पास ग्लोब पैटर्न से मेल खाने वाली स्थानीय निर्देशिका में कोई फ़ाइल है fil*
या abc*
, शेल उन्हें विस्तारित करेगा , तो grep
विस्तारित फ़ाइल नाम को पैटर्न के रूप में मिलेगा, न कि इरादा आरई। जब भी आप कमांड लाइन पर ऐसे पात्रों का उपयोग कर रहे हैं, तो आपको उन्हें उद्धृत करना चाहिए echo file | grep 'fil.*'
:।
echo file|grep fil*
साथ उत्तरfil
।