क्या grep की मूल अभिव्यक्तियों द्वारा समर्थित नहीं है?


119

यह कोई आउटपुट उत्पन्न नहीं करता है। कैसे?

$ echo 'this 1 2 3' | grep '\d\+'

लेकिन ये करते हैं:

$ echo 'this 1 2 3' | grep '\s\+'
this 1 2 3

$ echo 'this 1 2 3' | grep '\w\+'
this 1 2 3

2
मेरे (सोलारिस) काम करने वालों में से कोई नहीं।
१६:११

न ही मैं। (साइगविन) क्या आपका मतलब है \+? इसका क्या मतलब है?
एरिक विल्सन

हाँ, मैं Ubuntu 10.04 पर हूं, बैश का उपयोग करके। BRE in grep के लिए आपको कुछ पात्रों से बचना होगा। मैन grep में "बेसिक बनाम एक्सटेंडेड रेगुलर एक्सप्रेशंस" आज़माएँ।
अंकुर अग्रवाल

2
@FarmBoy: +एक regex में "पिछले टोकन के एक या अधिक" का अर्थ है। इस मामले में यह बच गया है क्योंकि यह सिंटैक्स के grepडिफ़ॉल्ट रेगेक्स इंजन द्वारा आवश्यक है ।
डेनिथ

2
@FarmBoy: +यदि आप उपयोग कर रहे हैं तो बच निकलने की जरूरत है grep; यदि आप उपयोग कर रहे हैं egrep, तो यह नहीं है। (GNU संस्करण के लिए कम से कम) के grep -Eबराबर है egrep
कीथ थॉम्पसन

जवाबों:


196

grepडिफ़ॉल्ट मोड है (iirc) POSIX regex, और \dpcre है। आप या तो -Pgnu grep से गुजर सकते हैं , perl-like regexps के लिए, या [[:digit:]]इसके बजाय उपयोग कर सकते हैं \d

daenyth@Bragi ~ $ echo 1 | grep -P '\d'
1
daenyth@Bragi ~ $ echo 1 | grep '[[:digit:]]'
1

10
BSD grep के -E मोड में \ d शामिल है। लेकिन GNU grep का -E मोड नहीं है। यह बहुत चौंकाने वाला है कि मैं हैरान हूं मैं अभी इसकी खोज कर रहा हूं।
कीथ टायलर

> BSD grep -E मोड में \ d शामिल है। लेकिन GNU grep का -E मोड नहीं है। यह बहुत चौंकाने वाला है कि मैं हैरान हूं मैं अभी इसकी खोज कर रहा हूं। यह मुझे एक बिट प्रतिबद्ध संदेश सत्यापन स्क्रिप्ट पर बिट। मुझे बहुत आश्चर्य हुआ \ _ अपराधी था।
ऑस्ट्रिनब्रुच

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.