Grep, pgrep, egrep, fgrep में क्या अंतर है?


55

मैं के बीच मतभेद पर के माध्यम से टहलने के लिए करना चाहते हैं grep, pgrep, egrep, और fgrepऔर कैसे मैं उन्हें का प्रयोग करेंगे।


1
इस साइट पर इस प्रश्न का पहले से ही एक अच्छा जवाब है। unix.stackexchange.com/questions/17949/…
अली 786

और bash script sgrep :-) भी है।
पाविक

जवाबों:


85

Grep, pgrep, egrep और fgrep (Linux) के बीच अंतर:

ग्रेप

grep एक परिचित है जो "ग्लोबल रेगुलर एक्सप्रेशंस प्रिंट" के लिए है। grep एक प्रोग्राम है जो एक निर्दिष्ट फ़ाइल या फ़ाइलों को लाइन द्वारा स्कैन करता है, रिटर्निंग लाइनें जिसमें एक पैटर्न होता है। एक पैटर्न एक अभिव्यक्ति है जो वर्णों को मेटा-पात्रों के रूप में व्याख्या करके स्ट्रिंग्स के एक सेट को निर्दिष्ट करता है। उदाहरण के लिए तारांकन मेटा वर्ण (*) का अर्थ "शून्य या पूर्ववर्ती तत्व के अधिक" के रूप में किया जाता है। यह उपयोगकर्ताओं को एक छोटी सी श्रृंखला और मेटा वर्णों की एक छोटी श्रृंखला को एक grep कमांड में टाइप करने में सक्षम बनाता है ताकि कंप्यूटर हमें दिखा सके कि कौन सी फाइलें किस लाइन से मेल खाती हैं।

मानक grep कमांड इस तरह दिखता है:

grep <flags> '<regular expression>' <filename>

grep स्क्रीन पर खोज परिणामों को प्रिंट करता है (स्टडआउट) और निम्नलिखित निकास मान लौटाता है:

0    A match was found.
1    No match was found.
>1   A syntax error was found or a file was inaccessible 
     (even if matches were found).

कुछ सामान्य झंडे हैं: -cसफल मैचों की संख्या की गिनती और वास्तविक मैचों की छपाई नहीं -iकरने के लिए, खोज मामले को असंवेदनशील बनाने के लिए, -nप्रत्येक मैच के प्रिंटआउट से पहले लाइन नंबर को प्रिंट -vकरने के लिए, नियमित अभिव्यक्ति के पूरक लेने के लिए (यानी लाइनों को वापस करें मेल नहीं खाते), और -lफाइलों का फाइल नाम प्रिंट करने के लिए लाइनों के साथ जो अभिव्यक्ति से मेल खाते हैं।

egrep

egrep एक संक्षिप्त रूप है जो "विस्तारित वैश्विक नियमित अभिव्यक्ति प्रिंट" के लिए है।

Egrep में 'E' का अर्थ है पैटर्न को एक नियमित अभिव्यक्ति के रूप में मानें। "एक्सटेंडेड रेगुलर एक्सप्रेशंस" संक्षिप्त रूप में 'ERE' को egrep में सक्षम किया गया है। egrep (जो रूप में ही है grep -Eव्यवहार करता है) +, ?, |, (, और )के रूप में मेटा-अक्षर।

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

उदाहरण के लिए, यहाँ grep मूल नियमित अभिव्यक्तियों का उपयोग करता है जहाँ प्लस का शाब्दिक रूप से व्यवहार किया जाता है, इसमें प्लस वाली कोई भी रेखा वापस आ जाती है।

grep "+" myfile.txt

दूसरी ओर egrep एक मेटा चरित्र के रूप में "+" व्यवहार करता है और हर पंक्ति को वापस करता है क्योंकि प्लस को "एक या अधिक बार" के रूप में व्याख्या की जाती है।

egrep "+" myfile.txt

यहाँ हर पंक्ति को लौटाया गया है क्योंकि +ईग्रेप द्वारा एक मेटा चरित्र के रूप में व्यवहार किया गया था। सामान्य क्रेप ने केवल शाब्दिक रेखाओं की खोज की होगी +

fgrep

fgrep एक संक्षिप्त रूप है जो "फिक्स्ड-स्ट्रिंग ग्लोबल रेगुलर एक्सप्रेशंस प्रिंट" के लिए है।

fgrep (जो grep -F के समान है) निश्चित या तेज grep है और grep के रूप में व्यवहार करता है, लेकिन विशेष होने के नाते किसी भी नियमित अभिव्यक्ति मेटा-वर्ण को नहीं पहचानता है। खोज तेजी से पूरी होगी क्योंकि यह केवल जटिल पैटर्न के बजाय एक साधारण स्ट्रिंग को संसाधित करता है।

उदाहरण के लिए, अगर मैं अपने शाब्दिक डॉट (।) के लिए .bash_profile खोजना चाहता था, तो grep का उपयोग करना मुश्किल होगा क्योंकि मुझे डॉट से बचना होगा क्योंकि डॉट एक मेटा कैरेक्टर है जिसका अर्थ है 'वाइल्ड-कार्ड, कोई एकल वर्ण ":

grep "." myfile.txt

उपरोक्त आदेश myfile.txt की प्रत्येक पंक्ति को लौटाता है। इसके बजाय यह करें:

fgrep "." myfile.txt

फिर केवल वे पंक्तियाँ जिनमें शाब्दिक हो '।' उनमें वापस आ गए। fgrep हमें अपने मेटा कैरेक्टर से बचने में परेशान नहीं करता है।

pgrep

pgrep एक संक्षिप्त रूप है जो "प्रोसेस-आईडी ग्लोबल रेगुलर एक्सप्रेशंस प्रिंट" के लिए है।

pgrep वर्तमान में चल रही प्रक्रियाओं के माध्यम से देखता है और प्रक्रिया ID को सूचीबद्ध करता है जो चयन मानदंड से मेल खाता है। pgrep तब काम आता है जब आप सभी जानना चाहते हैं कि प्रक्रिया की प्रक्रिया आईडी पूर्णांक है। उदाहरण के लिए, अगर मैं अपनी mysql प्रक्रिया की केवल प्रक्रिया आईडी जानना चाहता था, तो मैं कमांड का उपयोग pgrep mysqlकरूंगा जो 7312 के बाद एक प्रक्रिया आईडी लौटाएगा।


से pgrepमैनुअल : प्रक्रिया मिलान के लिए प्रयोग किया जाता है नाम के उत्पादन में मौजूद 15 वर्णों तक सीमित है / proc / पीआईडी / स्टेट । पूर्ण कमांड लाइन, / proc / pid / cmdline से मिलान करने के लिए -f विकल्प का उपयोग करें ।
पाब्लो ए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.