परिचय
लिनक्स grep कमांड इनपुट फ़िल्टरिंग के लिए एक विधि के रूप में प्रयोग किया जाता है।
जीआरईपी वैश्विक नियमित अभिव्यक्ति प्रिंटर के लिए खड़ा है और इसलिए इसे प्रभावी ढंग से उपयोग करने के लिए, आपको नियमित अभिव्यक्तियों के बारे में कुछ ज्ञान होना चाहिए।
इस लेख में, मैं आपको कई उदाहरण दिखाने जा रहा हूं जो आपको grep कमांड को समझने में मदद करेंगे।
09 का 01
GREP का उपयोग कर एक फ़ाइल में एक स्ट्रिंग के लिए कैसे खोजें
कल्पना करें कि आपके पास निम्नलिखित बच्चों के पुस्तक शीर्षक वाले पुस्तकें नामक एक टेक्स्ट फ़ाइल है:
- रॉबिन हुड
- लिटिल रेड राइडिंग हुड
- पीटर पैन
- गोल्डीलॉक्स और तीन भालू
- स्नो व्हाइट और सात Dwarfs
- Pinnochio
- टोपी में बिल्ली
- तीन छोटे सूअर
- ग्रफेलो
- चार्ली एंड द चॉकलेट फ़ैक्टरी
शीर्षक में "द" शब्द के साथ सभी पुस्तकों को खोजने के लिए आप निम्न वाक्यविन्यास का उपयोग करेंगे:
grep किताबें
निम्नलिखित परिणाम लौटाए जाएंगे:
- गोल्डीलॉक्स और तीन भालू
- स्नो व्हाइट और सात Dwarfs
- टोपी में बिल्ली
- तीन छोटे सूअर
- ग्रफेलो
- चार्ली एंड द चॉकलेट फ़ैक्टरी
प्रत्येक मामले में, शब्द "द" को हाइलाइट किया जाएगा।
ध्यान दें कि खोज केस संवेदनशील है इसलिए यदि शीर्षक में से एक के बजाय "द" के बजाय "द" था तो उसे वापस नहीं किया गया होता।
मामले को अनदेखा करने के लिए आप निम्न स्विच जोड़ सकते हैं:
grep किताबें --ignore-case
आप निम्नानुसार -i स्विच का उपयोग भी कर सकते हैं:
grep -i किताबें
02 में से 02
वाइल्डकार्ड का उपयोग कर एक फ़ाइल में एक स्ट्रिंग के लिए खोजें
Grep कमांड बहुत शक्तिशाली है। आप परिणामों को फ़िल्टर करने के लिए पैटर्न मिलान तकनीकों की भीड़ का उपयोग कर सकते हैं।
इस उदाहरण में, मैं आपको दिखाऊंगा कि वाइल्डकार्ड का उपयोग करके फ़ाइल में स्ट्रिंग को कैसे खोजा जाए।
कल्पना कीजिए कि आपके पास निम्न स्कॉटलैंड स्थान नाम वाले स्थान नामक एक फ़ाइल है:
एबरडीन
एबेरीस्ट्विथ
Aberlour
Inverurie
इन्वरनेस
newburgh
नया हिरण
नया galloway
ग्लासगो
एडिनबर्ग
यदि आप नाम में इनवर वाले सभी स्थानों को निम्नलिखित वाक्यविन्यास का उपयोग करना चाहते हैं:
grep inver * स्थानों
तारांकन (*) वाइल्डकार्ड 0 या कई के लिए खड़ा है। इसलिए यदि आपके पास इनवर या इन्वरनेस नामक जगह है तो दोनों को वापस कर दिया जाएगा।
आप जिस अन्य वाइल्डकार्ड का उपयोग कर सकते हैं वह अवधि (।) है। आप इसे एक पत्र से मेल खाने के लिए उपयोग कर सकते हैं।
grep inver.r जगहें
उपरोक्त आदेश में इनवररी और इनवर्री नामक स्थानों को मिलेगा लेकिन इनवेरीरी नहीं मिलेगी क्योंकि एकल अवधि के अनुसार दो आर के बीच केवल एक वाइल्डकार्ड हो सकता है।
वाइल्डकार्ड की अवधि उपयोगी है लेकिन यदि आपके पास खोज रहे पाठ के हिस्से के रूप में कोई है तो यह समस्याएं पैदा कर सकता है।
उदाहरण के लिए डोमेन नामों की इस सूची को देखें
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
सभी about.com को खोजने के लिए आप निम्न वाक्यविन्यास का उपयोग करके खोज सकते हैं:
grep * के बारे में * डोमेन नाम
यदि सूची में निम्न नाम शामिल है तो उपरोक्त आदेश नीचे गिर जाएगा:
- everydaylinuxuser.com/about.html
इसलिए, आप निम्न वाक्यविन्यास आज़मा सकते हैं:
grep * about.com डोमेन नाम
यह ठीक काम करेगा जब तक कि निम्न नाम वाला कोई डोमेन न हो:
aboutycom.com
वास्तव में about.com के लिए खोज करने के लिए आपको निम्नानुसार डॉट से बचने की आवश्यकता होगी:
grep * के बारे में \ .com डोमेन नाम
आपको दिखाने के लिए अंतिम वाइल्डकार्ड प्रश्न चिह्न है जो शून्य या एक वर्ण के लिए है।
उदाहरण के लिए:
grep? ber placenames
उपरोक्त आदेश aberdeen, aberystwyth या यहां तक कि बेरविक वापस आ जाएगा।
03 का 03
Grep का उपयोग कर लाइन की शुरुआत और अंत में स्ट्रिंग्स के लिए खोजें
कैरेट (^) और डॉलर ($) प्रतीक आपको लाइनों की शुरुआत और अंत में पैटर्न की खोज करने की अनुमति देता है।
कल्पना करें कि आपके पास निम्नलिखित टीम नामों के साथ फुटबॉल नामक एक फ़ाइल है:
- ब्लैकपूल
- लिवरपूल
- मैनचेस्टर सिटी
- लीसेस्टर सिटी
- मेनचेस्टर यूनाइटेड
- न्यूकैसल यूनाइटेड
- मैनचेस्टर के एफसी यूनाइटेड
यदि आप मैनचेस्टर के साथ शुरू हुई सभी टीमों को ढूंढना चाहते हैं तो आप निम्न वाक्यविन्यास का उपयोग करेंगे:
grep ^ मैनचेस्टर टीमों
उपरोक्त आदेश मैनचेस्टर सिटी और मैनचेस्टर यूनाइटेड लौटाएगा लेकिन मैनचेस्टर के एफसी यूनाइटेड नहीं।
वैकल्पिक रूप से आप निम्न वाक्यविन्यास का उपयोग कर यूनाइटेड के साथ समाप्त होने वाली सभी टीमों को पा सकते हैं:
grep संयुक्त $ टीमें
उपर्युक्त आदेश मैनचेस्टर यूनाइटेड और न्यूकैसल यूनाइटेड लौटाएगा लेकिन मैनचेस्टर के एफसी यूनाइटेड नहीं।
04 का 04
Grep का उपयोग कर मिलान की संख्या गिनती
यदि आप वास्तविक लाइनों को वापस नहीं करना चाहते हैं जो grep का उपयोग करके पैटर्न से मेल खाते हैं लेकिन आप बस यह जानना चाहते हैं कि आप निम्न वाक्यविन्यास का कितना उपयोग कर सकते हैं:
grep -c पैटर्न inputfile
यदि पैटर्न दो बार मेल खाता था तो नंबर 2 वापस कर दिया जाएगा।
05 में से 05
Grep का उपयोग करके मेल नहीं खाते सभी शर्तों को ढूँढना
कल्पना करें कि आपके पास निम्नानुसार सूचीबद्ध देशों के साथ स्थान नामों की एक सूची है:
- aberdeen स्कॉटलैंड
- ग्लासगो स्कॉटलैंड
- लिवरपूल इंग्लैंड
- कोल्विन बे
- लंदन, इंग्लॆंड
आपने देखा होगा कि कोल्विन बे के साथ कोई देश संबद्ध नहीं है।
किसी देश के साथ सभी स्थानों की खोज करने के लिए आप निम्न वाक्यविन्यास का उपयोग कर सकते हैं:
grep भूमि $ स्थानों
कोल्विन बे को छोड़कर परिणाम रिटर्न सभी जगह होंगे।
यह स्पष्ट रूप से केवल उन स्थानों के लिए काम करता है जो भूमि (शायद ही वैज्ञानिक) में समाप्त होते हैं।
आप निम्न वाक्यविन्यास का उपयोग कर चयन को उलटा कर सकते हैं:
grep -v भूमि $ स्थानों
यह उन सभी स्थानों को मिलेगा जो भूमि के साथ खत्म नहीं हुए थे।
06 का 06
Grep का उपयोग कर फ़ाइलों में खाली लाइनों को कैसे खोजें
कल्पना कीजिए कि आपके पास एक इनपुट फ़ाइल है जिसका उपयोग किसी तृतीय पक्ष एप्लिकेशन द्वारा किया जाता है जो फ़ाइल को पढ़ने को रोकता है जब इसे खाली रेखा मिलती है:
- aberdeen स्कॉटलैंड
- इनवरनेस स्कॉटलैंड
- लिवरपूल इंग्लैंड
- कोल्विन बे वेल्स
जब लिवरपूल के बाद एप्लिकेशन लाइन पर जाता है तो यह अर्थ पढ़ना बंद कर देगा कि कॉलविन बे पूरी तरह याद नहीं है।
आप निम्न वाक्यविन्यास के साथ रिक्त रेखाओं की खोज के लिए grep का उपयोग कर सकते हैं:
grep ^ $ स्थानों
दुर्भाग्यवश यह विशेष रूप से उपयोगी नहीं है क्योंकि यह केवल रिक्त रेखाएं देता है।
यह सुनिश्चित करने के लिए कि फ़ाइल निम्नानुसार मान्य है या नहीं, आप चेक के रूप में रिक्त रेखाओं की संख्या की गिनती प्राप्त कर सकते हैं:
grep -c ^ $ स्थानों
हालांकि लाइन नंबरों को जानने के लिए यह अधिक उपयोगी होगा जिसमें रिक्त रेखा है ताकि आप उन्हें बदल सकें। आप निम्न आदेश के साथ ऐसा कर सकते हैं:
grep -n ^ $ स्थानों
07 का 07
Grep का उपयोग कर अपरकेस या लोअरकेस अक्षरों के तारों के लिए कैसे खोजें
Grep का उपयोग करके आप निर्धारित कर सकते हैं कि फ़ाइल में कौन सी रेखाएं निम्नलिखित वाक्यविन्यास का उपयोग कर अपरकेस वर्ण हैं:
grep '[एजेड]' फ़ाइल नाम
वर्ग ब्रैकेट [] आपको वर्णों की सीमा निर्धारित करने देता है। उपर्युक्त उदाहरण में यह किसी भी चरित्र से मेल खाता है जो ए और जेड के बीच है।
इसलिए लोअरकेस अक्षरों से मिलान करने के लिए आप निम्न वाक्यविन्यास का उपयोग कर सकते हैं:
grep '[az]' फ़ाइल नाम
यदि आप केवल अक्षरों से मेल खाना चाहते हैं, न कि संख्या या अन्य प्रतीकों से आप निम्न वाक्यविन्यास का उपयोग कर सकते हैं:
grep '[ए-जेए-जेड]' फ़ाइल नाम
आप निम्नानुसार संख्याओं के साथ ऐसा कर सकते हैं:
grep '[0-9]' फ़ाइल नाम
08 का 08
Grep का उपयोग कर पैटर्न दोहराने के लिए देख रहे हैं
आप दोहराने वाले पैटर्न की खोज के लिए घुंघराले ब्रैकेट {} का उपयोग कर सकते हैं।
कल्पना कीजिए कि आपके पास फोन नंबरों के साथ एक फ़ाइल है:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
आप जानते हैं कि संख्या का पहला भाग तीन अंकों की आवश्यकता है और आप उन पंक्तियों को ढूंढना चाहते हैं जो इस पैटर्न से मेल नहीं खाते हैं।
पिछले उदाहरण से आप जानते हैं कि [0-9] सभी संख्याओं को फ़ाइल में लौटाता है।
इस उदाहरण में हम उन पंक्तियों को चाहते हैं जो तीन संख्याओं से शुरू होते हैं जिसके बाद एक हाइफ़न (-) होता है। आप निम्न वाक्यविन्यास के साथ ऐसा कर सकते हैं:
grep "^ [0-9] [0-9] [0-9] -" संख्याएं
जैसा कि हम पिछले उदाहरणों से जानते हैं, कैरेट (^) का अर्थ है कि रेखा निम्नलिखित पैटर्न से शुरू होनी चाहिए।
[0-9] 0 और 9 के बीच किसी भी संख्या की खोज करेगा क्योंकि इसमें तीन बार शामिल है, यह 3 संख्याओं से मेल खाता है। आखिर में एक हाइफ़न यह इंगित करने के लिए है कि एक हाइफ़न तीन संख्याओं में सफल होना चाहिए।
घुंघराले ब्रैकेट का उपयोग करके आप खोज को निम्न प्रकार से कम कर सकते हैं:
grep "^ [0-9] \ {3 \} -" संख्याएं
स्लैश {ब्रैकेट से बच निकलता है ताकि यह नियमित अभिव्यक्ति के हिस्से के रूप में काम करता है लेकिन संक्षेप में यह कह रहा है कि यह क्या है [0-9] {3} जिसका अर्थ 0 और 9 के बीच तीन गुना है।
घुंघराले ब्रैकेट का भी निम्नानुसार उपयोग किया जा सकता है:
{} 5,10
{5,}
{5,10} का अर्थ है कि जिस चरित्र की खोज की जा रही है उसे कम से कम 5 बार दोहराया जाना चाहिए, लेकिन 10 से अधिक नहीं, जबकि {5,} का अर्थ है कि चरित्र को कम से कम 5 बार दोहराया जाना चाहिए लेकिन यह उससे भी अधिक हो सकता है।
09 में से 09
Grep का उपयोग कर अन्य कमांड से आउटपुट का उपयोग करना
इस प्रकार हमने अलग-अलग फाइलों के भीतर मिलान पैटर्न को देखा है लेकिन grep पैटर्न को मिलान करने के लिए इनपुट के रूप में अन्य कमांड से आउटपुट का उपयोग कर सकता है।
इसका एक बड़ा उदाहरण ps कमांड का उपयोग कर रहा है जो सक्रिय प्रक्रियाओं को सूचीबद्ध करता है।
उदाहरण के लिए निम्न आदेश चलाएं:
पीएस-एफई
आपके सिस्टम पर चल रहे सभी प्रक्रियाओं को प्रदर्शित किया जाएगा।
आप निम्नानुसार एक विशेष चल रही प्रक्रिया की खोज के लिए grep का उपयोग कर सकते हैं:
पीएस-एफआई | grep फ़ायरफ़ॉक्स