2013-03-11 4 views
27

के साथ नियमित अभिव्यक्ति उपयोग मैं जैसे ls के साथ ईआर (विस्तारित नियमित अभिव्यक्तियों) का उपयोग करने की कोशिश कर रहा हूं।एलएस

मैं सभी फ़ाइलों को प्रिंट करने की कोशिश कर रहा हूं जिनमें एक्सटेंशन है (मुझे पता है कि मैं ls *.* का उपयोग कर सकता था, लेकिन मैं ईआर का उपयोग करना चाहता था)।

जब मैं उस कोड को चलाता हूं तो मुझे यह त्रुटि मिलती है: ls: .+..+: No such file or directory

+5

मुझे लगता है कि आप भ्रमित आर ई और खोल वाइल्डकार्ड कर रहे हैं: बैश की

नए संस्करणों के लिए रेगुलर एक्सप्रेशन ऑपरेटर, =~ है। जवाब यह भी निर्भर करेगा कि आप किस चीज का उपयोग कर रहे हैं। – Madbreaks

+1

तो मैं आरई में एलएस का उपयोग नहीं कर सकता? –

+2

जब तक आप ls के लिए कुछ फैंसी, गैर-मानक स्क्रिप्ट का उपयोग नहीं कर रहे हैं, ls regex नहीं लेता है। इसके अलावा, ओएस आपके वाइल्डकार्ड वर्णों को * आपके आदेश पर पारित होने से पहले संसाधित करेगा। – GetSet

उत्तर

57

आप shell globbing के साथ नियमित अभिव्यक्ति को भ्रमित कर रहे हैं। तुम क्या आप फ़ाइल नाम से मेल करने रेगुलर एक्सप्रेशन का उपयोग करना चाहते हैं तो कर सकते हैं:

$ ls | egrep '.+\..+' 
+1

समझ गया। तो, सबसे पहले मुझे यह जांचना है कि क्या मैं आरई स्वीकार करने का प्रयास कर रहा हूं। –

+2

यदि पैटर्न को अकेले 'ग्लोबिंग' से मेल नहीं किया जा सकता है तो आपको वैकल्पिक विधि का उपयोग करना होगा। * एफ.वाय.आई * उपकरण 'ढूंढ' regexp मिलान का समर्थन करता है। –

3

आप क्या शेल का उपयोग कर रहे कहना नहीं है, लेकिन वे आम तौर पर नियमित अभिव्यक्ति इस तरह का समर्थन नहीं करते हैं, हालांकि आम हैं * निक्स सीएलआई उपकरण (grep, sed, आदि) जो करते हैं।

बैश जैसे समर्थन जैसे गोले globbing, जो कुछ समान वर्णों (उदाहरण के लिए * *) का उपयोग करता है लेकिन यह वही बात नहीं है।

for x in `ls`; do 
    if [[ $x =~ .+\..* ]]; then 
     echo $x; 
    fi; 
done 
+1

कूल! मैंने इसके बारे में कभी नहीं सुना है! :) तो यह केवल '= ~' का उपयोग करता है और दुभाषिया समझ जाएगा कि मैं जो मिलान करने की कोशिश कर रहा हूं वह आरई है? –

+3

आपको इसे * टेस्ट * के संदर्भ में उपयोग करना होगा, मुझे डबल ब्रैकेट्स के साथ विश्वास है, इसलिए इस विशिष्ट मामले के लिए पाइपिंग (ई) grep के माध्यम से अधिक सरल है। लेकिन इसके बारे में जानना उपयोगी है। – delicateLatticeworkFever

+1

आपकी मदद के लिए बहुत बहुत धन्यवाद! मुझे यह टिप याद आएगी! ;) –

संबंधित मुद्दे