जवाबों:
शेल फ़ाइल नाम ग्लोबिंग और नियमित अभिव्यक्तियाँ कुछ समान वर्णों का उपयोग करती हैं, और उनके समान उद्देश्य हैं, लेकिन आप सही हैं, वे संगत नहीं हैं। फ़ाइल नाम ग्लोबिंग एक बहुत कम शक्तिशाली प्रणाली है।
फ़ाइल नाम ग्लोबिंग में:
*
"शून्य या अधिक वर्ण"
?
का अर्थ है "कोई भी एकल चरित्र"
लेकिन रीगेक्स में, आपको .*
"शून्य या अधिक वर्ण" का .
अर्थ करना होगा , और इसका अर्थ है "कोई भी एकल वर्ण।" ?
रीजैक्स में ए का अर्थ कुछ अलग है: पूर्ववर्ती आरई तत्व का शून्य या एक उदाहरण।
स्क्वायर कोष्ठक ( []
) कम से कम सरल मामलों के लिए मैं जिस सिस्टम पर यह टाइप कर रहा हूं, दोनों प्रणालियों में समान काम करता है। इसमें POSIX वर्ण वर्ग (जैसे [:alpha:]
) जैसी चीजें शामिल हैं । उस ने कहा, यदि आपको कई अलग-अलग सिस्टम प्रकारों पर काम करने के लिए आपके आदेशों की आवश्यकता है, तो मैं प्रारंभिक चीजों से परे कुछ भी उपयोग करने की सलाह देता हूं जैसे कि वर्णों की सूची (जैसे [abeq]
) और शायद चरित्र पर्वतमाला (जैसे [a-c]
)।
इन अंतरों का मतलब है कि दो सिस्टम सरल मामलों के लिए सीधे विनिमेय हैं। यदि आपको फ़ाइल नाम के regex मिलान की आवश्यकता है, तो आपको इसे अन्य तरीके से करने की आवश्यकता है। find -regex
एक विकल्प है। (ध्यान दें कि वहाँ है find -name
, वैसे भी, जो ग्लोब सिंटैक्स का उपयोग करता है।)
'%'
साधन '*'
।
मूल शीर्षक में व्यक्त किए गए प्रश्न का उत्तर:
फ़ाइलों को फ़िल्टर करने के लिए उपयोग की जाने वाली नियमित अभिव्यक्तियाँ क्यों भिन्न होती हैं?
फ़ाइल नाम विस्तार नियमित अभिव्यक्तियों को पूर्व निर्धारित करता है, पहले से ही अधिकांश ऑपरेटिंग सिस्टम (वाइल्डकार्ड / जोकर वर्ण) के साथ मौजूद है और बाद वाले की तुलना में बहुत सरल और सहज है।
जबकि *.txt
आकस्मिक उपयोगकर्ताओं द्वारा आसानी से समझा जा सकता है, अनुरूप .*\.txt
कुछ अनुभवी उपयोगकर्ताओं / प्रोग्रामर को लक्षित है , जिसका उल्लेख नहीं है ^.*\.txt$
...
*.txt
बराबर नहीं है .*\.txt
, यह (ज्यादातर) बराबर होता है .*\.txt$
क्योंकि .txt
(कम से कम उचित फ़ाइल नाम ग्लोबिंग मानने के बाद) कुछ भी नहीं हो सकता है । शायद ^.*\.txt$
उपयोग के आधार पर भी कुछ हद तक। अपनी बात साबित करता है?