2011-10-18 18 views
5

मैं किसी निर्देशिका में सभी फ़ाइलों को खोजने के लिए पैटर्न मिलान का उपयोग करने की कोशिश कर रहा हूं जिसमें .jpg या jpeg का विस्तार है।बैश पैटर्न मिलान

ls *.[jJ][pP][eE][gG] < - यह स्पष्ट रूप से केवल .jpeg फाइल एक्सटेंशन मिल जाएगा। सवाल यह है कि, मैं [eE वैकल्पिक कैसे बना सकता हूं?

उत्तर

6

कठिन मिलान करें।

ls *.[jJ][pP]{[eE],}[gG] 
+0

धन्यवाद बहुत बहुत, कि वास्तव में क्या मैं वास्तव में :) – Elliot

2

साथ ही साथ मानक (सरल) ग्लोब पैटर्न, बैश ≥4.0 ग्लोबिंग बढ़ा दी है।
यह off by default है। इसे चालू करने के लिए, shopt -s extglob

extglob के साथ आपके पास विस्तारित नियमित अभिव्यक्ति पैटर्न के साथ-साथ मानक पैटर्न तक पहुंच है। इसके अलावा, अपनी विशेष स्थिति में, आप case insensitive glob को सक्षम करके अपने ग्लोब के व्यवहार को और भी आगे बढ़ा सकते हैं, जो डिफ़ॉल्ट रूप से भी बंद है। इसे चालू करने के लिए, उपयोग करें: shopt -s nocaseglob

extglob सक्षम करने से मानक ग्लोब कैसे काम नहीं करते हैं। आप दो रूपों को मिला सकते हैं। एकमात्र मुद्दा यह है कि आपको विशेष विस्तारित रेगेक्स वाक्यविन्यास से अवगत होना चाहिए। उदाहरण के लिए, नीचे दिए गए उदाहरण में, इसका एकमात्र हिस्सा जो एक विस्तारित रेगेक्स है, ?(e) है। शेष मानक ग्लोब विस्तार है, केस-असंवेदनशीलता सक्षम है।

अपनी स्थिति के लिए विस्तारित-regex, केस-संवेदी ग्लोब है: Bash Extended Globbing:

shopt -s extglob nocaseglob 
ls -l *.jp?(e)g 

आपको कम से अधिक जानकारी और उदाहरण मिल सकते हैं।

+0

लिए देख रहा था, बैश बैश-2.02-alpha1 में ग्लोबिंग बढ़ाया गया (- 15 साल की तरह अर्थात एक _long_ समय पहले) है। डिफ़ॉल्ट रूप से चालू या बंद होने पर यह चुना जा सकता है जब '।/Config' चलाया जाता है (यानी संकलन से पहले)। असल में जिस संस्करण में इसे पेश किया गया था, उस लिंक पर दिखाया गया है जिसे आपने अपनी डिफ़ॉल्ट सेटिंग के लिए दिया था। –

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