लिनक्स में Grep, Egrep और Fgrep के बीच अंतर?


यूनिक्स जैसी प्रणालियों में एक प्रसिद्ध खोज उपकरण है जिसका उपयोग किसी भी चीज की खोज के लिए किया जा सकता है चाहे वह फाइल हो, या फाइल में एक लाइन या कई लाइनें हैं। यह कार्यक्षमता में बहुत विशाल है जिसे बड़ी संख्या में उन विकल्पों के लिए जिम्मेदार ठहराया जा सकता है, जैसे कि यह समर्थन करता है: स्ट्रिंग पैटर्न, या रेग-एक्स पैटर्न या पर्ल आधारित रेज-एक्स आदि का उपयोग करना।

इसकी अलग-अलग कार्यक्षमता के कारण, इसमें grep, egrep (विस्तारित GREP), fgrep (फिक्स्ड GREP), pgrep (प्रोसेस GREP), rgrep (पुनरावर्ती GREP) आदि सहित कई वेरिएंट हैं, लेकिन इन वेरिएंट के मूल grep में मामूली अंतर है, जिसने उन्हें बनाया है। लोकप्रिय और विशिष्ट कार्यों के लिए विभिन्न लिनक्स प्रोग्रामर द्वारा उपयोग किया जाना है।

मुख्य बात जो जांच की जानी बाकी है वह यह है कि तीन मुख्य वेरिएंट्स यानी p grep ’,’ egrep ’और g fgrep’ के बीच अंतर क्या है जिससे लिनक्स उपयोगकर्ता आवश्यकता के अनुसार एक या दूसरे संस्करण को चुनते हैं।

ग्रीप के कुछ विशेष मेटा-अक्षर

  1. + - पिछले वर्ण की एक या अधिक घटनाओं के बराबर है।
  2. ? - यह पिछले वर्ण के लगभग 1 पुनरावृत्ति को दर्शाता है। जैसे: a! 'a' या 'aa' से मेल खाएगा।
  3. ( - वैकल्पिक अभिव्यक्ति की शुरुआत।
  4. ) - वैकल्पिक अभिव्यक्ति का अंत।
  5. | - | द्वारा अलग किए गए अभिव्यक्ति के मिलान से। जैसे: "(a | b) cde" या तो 'abcde' या 'bbcde' से मेल खाएगा।
  6. { - यह मेटा-वर्ण श्रेणी विनिर्देशक के प्रारंभ को इंगित करता है। जैसे: "a {2}" फ़ाइल में "a" से मेल खाता है यानि 2 बार।//>
  7. } - यह मेटा-वर्ण श्रेणी विनिर्देश के अंत को इंगित करता है।

Grep, egrep और fgrep के बीच अंतर

Grep, egrep और fgrep के बीच कुछ मुख्य अंतर निम्नानुसार हाइलाइट किए जा सकते हैं। उदाहरणों के इस सेट के लिए हम यह मान रहे हैं कि किस फाइल पर ऑपरेशन किया जा रहा है:

grep या ग्लोबल रेगुलर एक्सप्रेशन प्रिंट, यूनिक्स जैसी प्रणालियों पर मुख्य खोज कार्यक्रम है जो किसी भी फ़ाइल या फ़ाइलों की सूची या किसी भी कमांड के आउटपुट पर किसी भी प्रकार के स्ट्रिंग की खोज कर सकता है।

यह खोज पैटर्न के रूप में सामान्य स्ट्रिंग्स के अलावा बेसिक रेगुलर एक्सप्रेशंस का उपयोग करता है। बेसिक रेगुलर एक्सप्रेशंस (BRE) में, मेटा-वर्ण जैसे: {,} , (,) , | , + , <कोड>? उनके अर्थ को ढीला कर देते हैं और उन्हें स्ट्रिंग के सामान्य पात्रों के रूप में माना जाता है और यदि उन्हें विशेष वर्णों के रूप में माना जाना है, तो बच निकलने की आवश्यकता है।

इसके अलावा, grep तेजी से किसी भी स्ट्रिंग या नियमित अभिव्यक्ति की खोज के लिए बोयर-मूर एल्गोरिथ्म का उपयोग करता है।

$ grep -C 0 '(f|g)ile' check_file
$ grep -C 0 '\(f\|g\)ile' check_file

यहाँ की तरह, जब कमांड को भागने के बिना चलाया जाता है () और | तो यह पूरी स्ट्रिंग के लिए खोजा गया <<कोड> "(f | g) ile" फाइल में। लेकिन जब विशेष वर्ण बच गए थे, तब उन्हें स्ट्रिंग के भाग के रूप में मानने के बजाय, grep ने उन्हें मेटा-वर्ण माना और शब्दों के लिए खोजा "file" या "gile" फ़ाइल में।

Egrep या grep -E grep या विस्तारित grep का दूसरा संस्करण है। Grep का यह संस्करण कुशल और तेज़ है जब यह एक नियमित अभिव्यक्ति पैटर्न की खोज के लिए आता है क्योंकि यह मेटा-वर्णों के रूप में व्यवहार करता है और उन्हें grep की तरह स्ट्रिंग्स के रूप में स्थानापन्न नहीं करता है, और इसलिए आपको भागने के बोझ से मुक्त किया जाता है ग्रेप में। यह ERE या विस्तारित नियमित अभिव्यक्ति सेट का उपयोग करता है।

एग्रेप के मामले में, भले ही आप मेटा-कैरेक्टर से बच न जाएं, यह उन्हें स्पेशल कैरेक्टर के रूप में मानेगा और उन्हें स्ट्रिंग के हिस्से के रूप में मानने के बजाय उनके विशेष अर्थ के लिए स्थानापन्न करेगा।

$ egrep -C 0 '(f|g)ile' check_file
$ egrep -C 0 '\(f\|g\)ile' check_file

यहाँ की तरह, जैसे कि मेटा-कैरेक्टर को नहीं छोड़ा गया था, जैसे कि इन कैरेक्टर्स के मतलब से होगा। लेकिन, जब ये पात्र बच गए, तब egrep ने उन्हें स्ट्रिंग का हिस्सा माना और फ़ाइल में पूर्ण स्ट्रिंग खोजा।

Fgrep या फिक्स्ड grep या grep -F अभी तक grep का एक और संस्करण है जो खोज में तेज है जब यह नियमित अभिव्यक्ति के बजाय पूरे स्ट्रिंग को खोजने के लिए आता है क्योंकि यह नियमित अभिव्यक्ति को नहीं पहचानता है, न ही कोई मेटा-वर्ण। किसी भी सीधे स्ट्रिंग की खोज के लिए, यह grep का संस्करण है जिसे चुना जाना चाहिए।

Fgrep पूर्ण स्ट्रिंग की खोज करता है और विशेष वर्णों को नियमित अभिव्यक्ति के भाग के रूप में पहचानता है भले ही बच गया हो या नहीं बच गया हो।

$ fgrep -C 0 '(f|g)ile' check_file
$ fgrep -C 0 '\(f\|g\)ile' check_file

जैसे, जब मेटा-अक्षर बच नहीं रहे थे, fgrep ने पूरी स्ट्रिंग "(f | g) ile" फ़ाइल में खोज ली और जब मेटा-अक्षर बच गए, तब fgrep कमांड ने खोज की। "\ (f\| g \) ile" जैसा कि सभी वर्ण फ़ाइल में है।

हम पहले से ही grep कमांड के कुछ व्यावहारिक उदाहरणों को कवर कर चुके हैं जिन्हें आप यहां पढ़ सकते हैं, यदि आप लिनक्स में grep कमांड से बाहर निकलना चाहते हैं।

निष्कर्ष

ऊपर हाइलाइट किए गए 'grep', 'egrep' और 'fgrep' के बीच अंतर हैं। उपयोग किए जाने वाले नियमित अभिव्यक्तियों के सेट में अंतर और निष्पादन की गति के अलावा, बाकी कमांड लाइन पैरामीटर grep के सभी तीन संस्करणों के लिए समान रहते हैं और यहां तक कि "egrep" या "fgrep", "grep -E" या grep के बजाय - एफ ”का उपयोग करने की सिफारिश की जाती है।

यदि आपको grep के इन तीन संस्करणों के बीच कोई अन्य अंतर लगता है, तो अपनी टिप्पणियों में उनका उल्लेख करें।