मैं कुछ हर रोज grepping कर रहा था और अचानक पता चला कि कुछ मालूम होता है तुच्छ काम नहीं करता:लोकेल से स्वतंत्र grep [ए-जेड] कैसे बनाया जाए?
$ echo T | grep [A-Z]
कोई मैच।
टी कैसे ए-जेड रेंज के भीतर नहीं है?
$ echo T | grep [A-Y]
एक मैच:
मैं regex एक छोटा सा बदल गया है!
वाह! ए-वाई के भीतर टी कैसे है लेकिन ए-जेड के भीतर नहीं है? ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY
$ echo $LANG
et_EE.UTF-8
यह सभी के लिए एक आघात का एक सा रूप में आया था:
जाहिर है इस वजह से मेरी पर्यावरण एस्टोनियाई स्थान के लिए सेट कर दिया जाता है, जहां वाई वर्णमाला के अंत में है, लेकिन जेड बीच में कहीं है मुझे। 99% समय मैं कंप्यूटर कोड grep, एस्टोनियाई साहित्य नहीं। क्या मैं हर समय गलत तरीके से grep का उपयोग कर रहा हूं? अतीत में इस तरह की सभी गलतियों के कारण मैंने क्या किया है?
निम्नलिखित समाधान में कई बातें मैं आ कोशिश के बाद:
$ echo T | LANG=C grep [A-Z]
इस ग्रेप स्थान-स्वतंत्र बनाने की सलाह दी रास्ता नहीं है?
आगे पढ़ें ... ऐसा एक उपनाम परिभाषित करने के लिए सुरक्षित होगा:
$ alias grep="LANG=C grep"
पी एस। मैं भी क्यों चरित्र हैं की सोच रहा हूँ [A-Z]
स्थान की तरह पहली जगह में निर्भर पर्वतमाला जबकि \w
स्थान से अप्रभावित होने के लिए (हालांकि पुस्तिका का कहना है \w
[[:alnum:]]
के बराबर है लगता है - लेकिन मुझे पता चला उत्तरार्द्ध स्थान पर निर्भर करता है, जबकि \w
नहीं करता)।
कि फिर से सभी का प्रयास करें, लेकिन अपने अभिव्यक्ति 'ग्रेप '[A-Z]'' बोली, बस सुनिश्चित खोल कि विस्तार हो रहा नहीं है बनाने के लिए। – Mat
उद्धरण के साथ और बिना मेरे लिए बिल्कुल वही काम करता है। –
वही काम करता है क्योंकि आपके पास ए के माध्यम से ए फ़ाइल नाम नहीं है। खोल ने [ए-जेड] का विस्तार करने की कोशिश की, कुछ भी नहीं मिला, और इसे अकेला छोड़ दिया। हमेशा grep के लिए पैटर्न पास करने के लिए उद्धरण का प्रयोग करें। – Gilbert