Grep में कई शब्दों के "या" के लिए Regex


12
[Computer]$ grep "foo|bar" filename

मैं समझता हूं कि उपरोक्त आदेश को फ़ाइल नाम में प्रत्येक पंक्ति को वापस करना चाहिए जहां "फू" या "बार" बाहर निकलता है। आदमी पृष्ठों की पुष्टि करता है | रेगेक्स या प्रतीक के रूप में और कोड "फू" और "बार" के लिए स्वतंत्र रूप से काम करता है। मैं क्या खो रहा हूँ?

जवाबों:


21

grep मूलभूत रूप से मूल भाव (BRE) का उपयोग करता है। मैन पेज से:

बेसिक बनाम एक्सटेंडेड रेगुलर एक्सप्रेशंस: बेसिक रेगुलर एक्सप्रेशंस में मेटा-कैरेक्टर्स; +, {,। | (और;) अपने विशेष अर्थ खो देते हैं; इसके बजाय बैकस्लेस्ड संस्करण \ ?, +, {, \ |, (, और) का उपयोग करें।

इसलिए आपको या तो बचना होगा |:

grep "foo\|bar" filename 

या विस्तारित नियमित अभिव्यक्तियों को चालू करें:

grep -E "foo|bar" filename

मैन मैन पेज में देखा और गलत समझा। मुझे लगा कि इसका मतलब है कि \ | यह व्यक्तिगत अभिव्यक्तियों के विपरीत पूर्ण अभिव्यक्ति "फू | बार" की तलाश करेगा। शीघ्र प्रतिक्रिया के लिए शुक्रिया!
ओकासा एशू

4
आप इसके बजाय egrep(एक उपनाम भी) का उपयोग कर सकते हैं । grep -Egrep
12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.