Grep -e और grep -E विकल्प में क्या अंतर है?


34

मैं grep -eऔर के बीच के अंतर को समझने की कोशिश कर रहा हूं grep -E। अब grep manpageमुझे मिला:

-ई, - मिश्रित-रेगेक्सप

PATTERN को एक विस्तारित नियमित अभिव्यक्ति के रूप में व्याख्या करें (नीचे देखें)।

-E PATTERN, --regexp = PATTERN

पैटर्न के रूप में पैटर्न का उपयोग करें; के साथ शुरू पैटर्न की रक्षा के लिए उपयोगी -

उपरोक्त व्याख्या मेरे लिए कोई मतलब नहीं रखती है।

तो, क्या कोई मुझे यह समझा सकता है examplesकि दोनों के बीच क्या अंतर है और कब और किस विकल्प का उपयोग करना है।

PS: संस्करण: grep (GNU grep) 2.10



3
-eजब रेगेक्स एक डैश के साथ शुरू होता है, तो इसका उद्देश्य वास्तव में केवल अवज्ञा करना है। तो grep ---fooदेता है unrecognized option: ---fooलेकिन आप grep -e ---fooनियमित अभिव्यक्ति के लिए संक्षिप्त करने के लिए कह सकते हैं ---foo
त्रिकाल

जवाबों:


29

-eउस पैटर्न को इंगित करने के लिए सख्ती से ध्वज है जिसे आप विरोध करना चाहते हैं। -Eनियंत्रित करता है कि आपको कुछ विशेष वर्णों से बचने की आवश्यकता है या नहीं।

man grep-Eइसे थोड़ा और समझाता है:

   Basic vs Extended Regular Expressions
   In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).

   Traditional  egrep  did  not  support  the  {  meta-character, and some egrep implementations support \{ instead, so portable scripts should avoid { in grep -E patterns and should use [{] to match a
   literal {.

   GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification.  For example, the command grep -E '{1' searches for
   the two-character string {1 instead of reporting a syntax error in the regular expression.  POSIX.2 allows this behavior as an extension, but portable scripts should avoid it.

2
यही कारण है कि जब मैं करता हूं तो echo "hello" | grep -o -e 'h|l'मुझे कोई आउटपुट नहीं मिलता है क्योंकि |इसका विशेष अर्थ खो जाता है और जब मैं करता echo "hello" | grep -o -E 'h|l'हूं मुझे वांछित आउटपुट मिलता है।

2
हाँ। echo "hello" | grep -o -e 'h' -e 'l'आप -Eइस मामले में दूर टॉस करना चाहते हैं तो काम करेंगे ।
हफिचुक

3
grep -e -o 'h|l'मैच का शाब्दिक अर्थ होगा h|lजब grep -e -o 'h\|l'मैच होगा hया lसाथ होगा- इसके विपरीत है
नहुएल फौलीउल

@ क्रोनी यह दुर्भाग्यपूर्ण है कि आपको 200 + प्रतिष्ठा की आवश्यकता है कि "सुविधा" आपको एसई साइटों के बीच का पालन करें ...
हाईफिचुक

5

इसके अलावा grep -e: खोज के लिए कई तार का उपयोग करने की अनुमति देता है 'grep -e 'abc' -e 'def' -e '123': इस तार के सभी तीन के लिए दिखेगा abcके साथ-साथ defऔर 123

यह काफी हद तक उसी तरह काम करता है, जैसा grep 'abc\|def\|123'कि \|खड़ा है, orलेकिन पढ़ने में थोड़ा स्पष्ट हो सकता है।

जैसा कि सबसे महत्वपूर्ण तथ्यों पर grep -Eपहले से ही यहां बताया गया है, मैं बस इस विषय पर एक समान प्रश्न पर मुझे जो जोड़ना चाहता हूं, जोड़ना चाहता हूं: बैश में दोहरे चरित्र खोजने के लिए नियमित अभिव्यक्ति


3

निचे देखो

/ बढ़ाया

grep नियमित अभिव्यक्ति सिंटैक्स के तीन अलग-अलग संस्करणों को समझता है: "मूल," "विस्तारित" और "perl।" GNU grep में, बुनियादी और विस्तारित सिंटैक्स के बीच उपलब्ध कार्यक्षमता में कोई अंतर नहीं है। अन्य कार्यान्वयन में, बुनियादी नियमित अभिव्यक्ति कम शक्तिशाली हैं। निम्नलिखित विवरण विस्तारित नियमित अभिव्यक्तियों पर लागू होता है; बुनियादी नियमित अभिव्यक्तियों के लिए अंतर को बाद में संक्षेपित किया जाता है। पर्ल नियमित अभिव्यक्तियाँ अतिरिक्त कार्यक्षमता देती हैं, और pcresyntax (3) और pcrepattern (3) में प्रलेखित हैं, लेकिन हर सिस्टम पर उपलब्ध नहीं हो सकती हैं।

तो, एक बार फिर से।

GNU grep में, बुनियादी और विस्तारित सिंटैक्स के बीच उपलब्ध कार्यक्षमता में कोई अंतर नहीं है


2
कार्यक्षमता बुनियादी और विस्तारित के बीच में ही है लेकिन वाक्य रचना थोड़ी अलग है। जैसे विशेष वर्ण regexp (, ), |आदि बैकस्लैश-एस्केप्ड बुनियादी regexp में अपने विशेष अर्थ नहीं होता है, लेकिन नहीं बढ़ाया में (जहां वे एक स्ट्रिंग शाब्दिक रूप में माना जाता फरार हो जाने की जरूरत है) होने के लिए की जरूरत है
cas

1

बस -eविकल्प पर विस्तार से बताना है । -eअक्सर वैकल्पिक होता है:

grep PATTERN

के समान है

grep -e PATTERN

जब तक, जैसा कि पहले वाले उत्तर में और मैन पेजों में कहा गया है, कई खोज पैटर्न हैं, या एक हाइफ़न (-) के साथ शुरू होने वाले पैटर्न की रक्षा के लिए।

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