यह गाइड grep उपयोगिता का उपयोग करके कई शब्दों, स्ट्रिंग्स, और पैटर्न को खोजने के लिए बताता है। नीचे इसे पूरा करने के लिए उपयोग की जाने वाली कमांड के पूर्ण उदाहरण पा सकते हैं।
Grep क्या है?
जब हम grep का उल्लेख करते हैं, तो हम कमांड-लाइन फ़ंक्शन के बारे में बात कर रहे हैं। Grep का अर्थ ग्लोबल रेगुलर एक्सप्रेशन प्रिंट है। संक्षेप में, यह इनपुट फ़ाइलों को उन लाइनों की तलाश में खोजेगा जो एक निश्चित नियमित अभिव्यक्ति से मेल खाती हैं। यह फिर प्रत्येक लाइन को मानक आउटपुट के लिए लिखकर परिणाम लौटाता है।
grep उपयोगिता तीन अभिव्यक्ति सिंटैक्स के लिए उपयुक्त है। इन्हें बेसिक, एक्सटेंडेड, या पर्ल-संगत के रूप में निर्दिष्ट किया जा सकता है। यदि कोई नियमित अभिव्यक्ति सिंटैक्स निर्दिष्ट नहीं है, तो GNY grep खोज पैटर्न को बेसिक अभिव्यक्ति के रूप में सेट करेगा।
एकाधिक पैटर्न के लिए Grep
यदि आप एकाधिक पैटर्न खोजना चाहते हैं, तो आप OR ऑपरेटर का उपयोग कर सकते हैं, जिसे अल्टरनेशन ऑपरेटर कहा जाता है। यह ऑपरेटर/पाइप इस तरह दिखता है: |
यह उपयोगकर्ता को सभी संभावित मिलानों को निर्दिष्ट करने में सक्षम करेगा, चाहे वे अभिव्यक्ति सेट हों या शाब्दिक स्ट्रिंग्स। जैसे, एकाधिक पैटर्न खोजने के लिए, इनपुट होगा:
$ grep 'first pattern\|second pattern' filename
‘first pattern‘ और ‘second pattern‘ को उन संभावित पैटर्न से बदला जाएगा जिन्हें आप खोज रहे हैं। यह नियमित अभिव्यक्ति – ‘first pattern\|second pattern‘ – हमेशा सिंगल कोट्स में संलग्न होनी चाहिए। पाइप प्रतीक अल्टरनेशन ऑपरेटर के रूप में समर्थित नहीं है और जैसे कि grep को पाइप को अलग तरीके से निर्देश देने के लिए एस्केप (बैकस्लैश) वर्ण की आवश्यकता होती है।
इच्छित पैटर्न को एक्सटेंडेड नियमित अभिव्यक्ति के रूप में निर्दिष्ट करने के लिए, ‘-e‘ या ‘—extended-regexp‘ का उपयोग किया जा सकता है। उदाहरण के लिए:
$ grep -E 'first pattern|second pattern' filename
एक्सटेंडेड रेगेक्स में, आपको पाइप को एस्केप करने की आवश्यकता नहीं है।
आप फ़ाइल द्वारा खोज सकते हैं, इसलिए presentation.txt के भीतर पैटर्न खोजना इस तरह दिख सकता है:
$ grep -E 'first pattern|second pattern' presentation.txt
आउटपुट उन स्ट्रिंग्स को दिखाएगा जिन्हें आप grep करना चाहते हैं हाइलाइट किए गए।
यदि आप जिस फ़ाइल को खोज रहे हैं वह किसी अन्य निर्देशिका के भीतर है, तो आपको grep को उस विशिष्ट निर्देशिका में खोज करने का निर्देश देना होगा पूर्ण फ़ाइल पथ का उपयोग करके। उदाहरण के लिए:
$ grep -E 'first pattern|second pattern' /home/presentation.txt
एकाधिक स्ट्रिंग्स के लिए Grep
सबसे बुनियादी पैटर्न शाब्दिक स्ट्रिंग्स हैं। एकाधिक स्ट्रिंग्स खोजने के लिए, आप इन्हें grep कमांड के बाद दर्ज करेंगे। कल्पना करें कि हम ‘one‘, ‘two‘, और ‘three‘ खोज रहे हैं। यह इस तरह दिख सकता है:
$ grep 'one\|two\|three'
उस कमांड के बाद उस फ़ाइल को फॉलो करें जिसमें आप खोज रहे हैं। यदि आप एक्सटेंडेड नियमित अभिव्यक्ति का उपयोग करके खोज रहे हैं, तो आप अनिवार्य रूप से ‘\‘ को हटा रहे हैं। उदाहरण के लिए:
$ grep -E 'one|two|three'
केस संवेदनशीलता को अनदेखा करें
कमांड ‘grep’ केस संवेदनशील है। अक्षर केस को अनदेखा करने के लिए, ‘-i‘ या ‘—ignore-case‘ विकल्प के साथ आमंत्रित करें। उदाहरण के लिए:
$ grep -i 'one\|two\|three'
एकाधिक मिलानों की गणना प्रदर्शित करना
यदि आप एक लॉग फ़ाइल के भीतर हैं और जानना चाहते हैं कि चेतावनी और त्रुटि संदेशों की संख्या बढ़ती है या नहीं, लेकिन पूरी विस्तृत परिणाम देखे बिना, आप ‘-c‘ का उपयोग कर सकते हैं। myapp.log फ़ाइल के भीतर एकाधिक मिलानों की गणना करने के लिए, यह इस तरह दिख सकता है:
grep -c 'one\|two\|three' /var/log/myapp.log
विशिष्ट फ़ाइल प्रकारों में एकाधिक पैटर्न Grep
एकाधिक स्ट्रिंग्स को एक निश्चित फ़ाइल प्रकार में खोजा जा सकता है। यह आपको एक निर्देशिका के भीतर सभी टेक्स्ट फ़ाइलों या सभी लॉग फ़ाइलों को खोजने की अनुमति देता है। फ़ाइल नाम के बजाय फ़ाइल एक्सटेंशन के साथ एक एस्टेरिस्क का उपयोग करने से grep को निर्देश मिलेगा। उपरोक्त त्रुटि संदेशों के उदाहरण का उपयोग करते हुए, सभी लॉग फ़ाइलों के माध्यम से देखना इस तरह दिख सकता है:
grep -c 'one\|two\|three' /var/log/*.log
एकाधिक मिलानों के लिए रिकर्सिवली खोजें
एस्टेरिस्क उपयोग में होने पर grep केवल वर्तमान निर्देशिका के भीतर खोजेगा। यदि आपको सभी उपनिर्देशिकाओं को शामिल करने की आवश्यकता है, तो ‘-R’ विकल्प का उपयोग किया जा सकता है:
grep -R 'one\|two\|three' /var/log/*.log
यह तब निर्दिष्ट var/log/ निर्देशिका और उपनिर्देशिकाओं के भीतर पाई गई सभी फ़ाइलों के लिए परिणाम लौटाएगा।
सटीक मिलानों के लिए grep का उपयोग करना
‘grep’ कमांड उन सभी परिणामों को प्रदर्शित करेगा जहां स्ट्रिंग एम्बेडेड भी है और न केवल सटीक मिलान। उदाहरण के लिए, ‘value’ खोजते समय यह उन लाइनों को प्रिंट करेगा जिनमें ‘values’ और ‘valued’ भी शामिल हैं। यदि आप केवल पूरे शब्द के सटीक मिलान वाली लाइनों को लौटाना चाहते हैं, तो आप ‘-w‘ या ‘—word-regexp‘ का उपयोग कर सकते हैं। यह ऐसा दिख सकता है यदि आप ‘one‘, ‘two‘, और ‘three‘ के सटीक मिलान खोज रहे हैं:
$ grep -w 'one\|two\|three'
वर्ण अल्फ़ान्यूमेरिक के समावेशी हैं, इसलिए 0-9 और a-z प्लस अंडरस्कोर वर्ण। किसी भी अन्य को गैर-शब्द वर्ण माना जाता है।