नियमित अभिव्यक्ति के लिए पूछा गया प्रश्न। बैश, और इस प्रकार ls
, यहां नियमित अभिव्यक्तियों का समर्थन नहीं करता है। इसका समर्थन करता है फ़ाइल नाम अभिव्यक्ति ( ग्लोबिंग ), वाइल्डकार्ड का एक रूप है। नियमित अभिव्यक्तियाँ उससे कहीं अधिक शक्तिशाली हैं।
यदि आप वास्तव में नियमित अभिव्यक्ति का उपयोग करना चाहते हैं, तो आप find -regex
इस तरह का उपयोग कर सकते हैं :
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt'
ढूँढें डिफ़ॉल्ट रूप से पुनरावर्ती है, लेकिन ls
ऐसा नहीं है। केवल वर्तमान निर्देशिका में फ़ाइलें खोजने के लिए, आप पुनरावृत्ति को अक्षम कर सकते हैं -maxdepth 1
। पथ के साथ फ़ाइल नाम के विरुद्ध मैच ढूंढें, यही कारण है कि फ़ाइल नाम ./
आपके द्वारा चलाए जाने पर प्रारंभ होता है .
। रेगेक्स \./
उस के साथ सामना करने के लिए शुरू होता है। ध्यान दें कि regex में, .
किसी भी वर्ण से मेल खाने वाला एक विशेष वर्ण है, लेकिन यहाँ हम वास्तव में एक बिंदु चाहते हैं, इसीलिए हम इसे बैकस्लैश के साथ छोड़ देते हैं। हम डॉट इन के लिए भी ऐसा ही करते हैं .txt
, क्योंकि रेगेक्स अन्यथा भी मेल खाएगा Atxt
। अंकों की कक्षाएं ग्लोबिंग के लिए समान होती हैं, बस आपको चरित्र वर्ग को पलटने के ^
बजाय उसकी आवश्यकता होती है !
।
यदि आप आउटपुट प्राप्त करना चाहते हैं ls
, तो आप -exec ls
इस तरह का उपयोग कर सकते हैं :
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt' -exec ls -lah {} \;
find
विभिन्न regex जायके के एक जोड़े का समर्थन करता है। आप एक -regextype
उदाहरण के लिए निर्दिष्ट कर सकते हैं :
find . -maxdepth 1 -regextype egrep -regex '\./.*[^0-9][0-9]\.txt'
मेरे लिए, संभावित प्रकार हैं: 'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic' , 'पॉज़िक्स-एंग्रेप', 'पॉज़िक्स-एक्सटेंडेड', 'पॉज़िक्स-मिनिमम-बेसिक', 'सेड' आप यह find -regextype help
जानने के लिए दौड़ सकते हैं कि आपके सिस्टम में क्या सपोर्ट है।
shopt -s extglob
:।