जब मैं एक ही grep
कमांड का उपयोग करके दो अलग-अलग पंक्तियों पर दो अलग-अलग वाक्यांशों की खोज कर सकता हूं
उदाहरण के लिए
पंक्ति १: यह एक मिठाई है।
पंक्ति 2: नींबू।
मैंने इसका इस्तेमाल किया लेकिन कोई नतीजा नहीं निकला
grep "sweet.*lemon" file_type
जब मैं एक ही grep
कमांड का उपयोग करके दो अलग-अलग पंक्तियों पर दो अलग-अलग वाक्यांशों की खोज कर सकता हूं
उदाहरण के लिए
पंक्ति १: यह एक मिठाई है।
पंक्ति 2: नींबू।
मैंने इसका इस्तेमाल किया लेकिन कोई नतीजा नहीं निकला
grep "sweet.*lemon" file_type
जवाबों:
grep
दो अलग-अलग लाइनों के लिए उपयोग करने के लिए, दोनों पैटर्न खोजें
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
या वैकल्पिक का उपयोग करें
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
एक पैटर्न के बाद अगली पंक्ति प्राप्त करने के लिए, आप संदर्भ विकल्प का उपयोग कर सकते हैं
$ grep -A1 sweet file_type
This is a sweet
lemon.
लेकिन अगर आप एक बहु पैटर्न, के लिए स्पष्ट रूप से खोज कर रहे हैं कि मुश्किल वजह से grep
लाइनों में सोचता है ... । आपका .*
" लाइन " और "नींबू" लाइन के बीच सब कुछ पकड़ लेगा । हम साथ अगली पंक्ति "नींबू" प्राप्त कर सकते हैं -P
का उपयोग कर \n
न्यू लाइन से मिलान करने और बताकर grep
फ़ाइल अशक्त से अलग है -z
:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
-E
विस्तारित नियमित अभिव्यक्तियों का उपयोग करें ( |
इसे भागने की आवश्यकता के बिना वर्ण के लिए वर्ण का उपयोग करने के लिए )-An
पैटर्न के बाद अतिरिक्त लाइनें प्रिंट करें, जहां n को प्रिंट करने के लिए अनुगामी लाइनों की संख्या है-P
पर्ल-स्टाइल रेग्युलर एक्सप्रेशंस ("प्रायोगिक" का उपयोग करें grep
- pcregrep
बेहतर पर्ल रेगेक्स समर्थन के लिए स्थापित करें )-z
अशक्त चरित्र को विभाजक के रूप में उपयोग करें (सिर्फ इस मामले में दिखावा, लेकिन grep
इसके लिए हमारा शब्द लेंगे)-o
केवल मिलान किए गए भाग को प्रिंट करें-o
... के साथ उपयोगी है ... संपादित करें
grep: The -P and -z options cannot be combined
- उदाहरण के लिए grep (GNU grep) 2.5.1 RHEL पर
ऐशे ही:
grep "sweet\|lemon"
grep
"मानक मोड" में डिफ़ॉल्ट काम करता है, जहां "विशेष वर्ण" की तरह से |
, +
, *
सचमुच में व्याख्या कर रहे हैं , जब तक कि वे एक बैकस्लैश के साथ नकाबपोश कर रहे हैं। उदाहरण के लिए देखें यह उत्तर । आपके द्वारा संभवतः उपयोग किए जाने वाले तरीके का उपयोग करने के लिए, "विशेष वर्ण" को शाब्दिक रूप से व्याख्या करने के लिए मास्क करने की आवश्यकता होती है, आपको "विस्तारित मोड" ( grep -E
) पर स्विच करने की आवश्यकता होती है । हो सकता है कि पागलखाने उसके जवाबों पर थोड़ा और विस्तार कर सके, उदाहरण के लिए ओपी की कोशिश क्या मेल खाती होगी ?
grep -zP
कमांड इस विशिष्ट मामले में काम करेगा (बिल्कुल दो लाइनों से युक्त एक फ़ाइल) यह सामान्य रूप से किसी भी सामान्य न्यूलाइन-सेपरेटेड फ़ाइल को सिंगल लाइन माना जाएगा, इसलिए या तो पूरी फ़ाइल सामग्री को डंप करें (यदि कहीं मैच हो रहा है) या कुछ नही; आमतौर पर वह नहीं है जो लोग उपयोगgrep
करते हैं।