grep जीएनयू / लिनक्स कमांड लाइनवरील हे सर्वात जास्त वापरले जाणारे एक साधन आहे. एक अगदी साधे साधन असूनही, हे आपल्याला मोठ्या प्रमाणात ऑपरेशन्स करण्याची परवानगी देते. मागील कमांड इ. च्या आउटपुटमध्ये विशिष्ट बिंदू शोधण्यात सक्षम होण्यासाठी, विशेषत: पाईप्सच्या सहाय्याने याचा उपयोग केला जातो. परंतु तेथे एक टूल देखील आहे ज्याला एरेरेप असे म्हणतात जे -E पर्यायासह ग्रीप चालू करण्यासाठी समतुल्य आहे.
ई "एक्सटेंडेड रेजेक्स" वरुन आला आहे, जो -E पर्याय कार्यान्वित करतो आणि आपल्याकडे डीफॉल्टनुसार डीफॉल्टनुसार कोणता पर्याय वापरल्याशिवाय नाही. म्हणजेच तुम्ही हे वापरू शकता नियमित अभिव्यक्ती वाढविली. या ट्यूटोरियल मध्ये मी नियमित अभिव्यक्ती काय आहेत, ते कसे वापरले जाऊ शकतात आणि कोणते प्रकार * निक्समध्ये आहेत याविषयी मी स्पष्टीकरण देणार नाही. मी फक्त egrep सह करू शकणार्या काही उपयुक्त गोष्टींची व्यावहारिक उदाहरणे दाखवीन ...
grep, egrep आणि fgrep समान आहेत. खरं तर, एग्रीप ग्रेप-ई च्या समतुल्य आहे आणि fgrep ही ग्रीप-एफ च्या समतुल्य आहे. म्हणजेच, ज्या गोष्टींबद्दल आम्हाला काळजी वाटते, त्या नमुन्यांचा नियमित अभिव्यक्ती म्हणून देखील वर्णन करेल.
आपण हे करू शकता एक ओळ किंवा शब्द शोधा एक किंवा अधिक फाईल्समध्ये, ग्रीप प्रमाणेच आहे. उदाहरणार्थ, समजा तुम्हाला snap.txt नावाच्या फाईलमध्ये आणि सध्याच्या निर्देशिकेतील सर्व .txt फाइल्समध्ये उबंटू हा शब्द शोधायचा आहेः
egrep ubuntu snap.txt
egrep ubuntu *.txt
शोध देखील असू शकतो रिकर्सिव सद्य निर्देशिकेची संपूर्ण सामग्री शोधण्यासाठी:
egrep -r "hola mundo" *
आतापर्यंत, अचूक शब्द किंवा तार शोधले गेले होते, म्हणजेच, अप्पर आणि लोअर केस (केस-सेन्सेटिव्ह) लक्षात घेऊन, परंतु आपण हे केस-संवेदनशील मोडमध्ये करू इच्छित असल्यास, ते अपरकेस किंवा लोअरकेस असले तरी हरकत नाही, आपण खालील वापरू शकता (आपण डब्ल्यू जोडल्यास त्यात केवळ संपूर्ण सामने आढळतात):
egrep -i "ejemplo" documento.txt
egrep -iw "ejemplo" documento.txt
योगायोग नव्हे तर दर्शवा जिथे त्या सामने आढळल्या त्या फाईलनावे:
egrep -l hola *.txt
फक्त नमुना किंवा शब्द दर्शवा कागदजत्रात शोध घेतला:
egrep -o printf hola.c
लक्षात ठेवा आपण कल्पना करू शकता अशा सर्व शक्यता आपण वापरू शकता. आपण यापूर्वी पाहिलेले बरेच पर्याय एकत्र करू शकता किंवा -ए एन आणि-बी एन सारख्या इतर पर्यायांसह त्यांचे पूरक होऊ शकता, जेथे एन यापूर्वी (आधी) आणि नंतर (नंतर) आपण दर्शवू इच्छित असलेल्या ओळींची संख्या सामना किंवा दोन्ही एकाच वेळी (सी), जेणेकरून आपण सामन्याभोवती काय पहात आहात हे पाहू शकता:
egrep -A 2 "printf" hola.c
egrep -B 2 "printf" hola.c
egrep -C 2 printf hola.c
रेखा जुळतात ज्यामध्ये सामना असतो आणि केवळ जुळत नसलेल्या दर्शवा:
egrep -v "dos" números.doc
किंवा आपण प्राधान्य दिल्यास, आपण वापरू शकता अनेक शब्द किंवा -e सह जुळते. उदाहरणार्थ:
egrep -v -e "uno" -e "dos" -e "tres" números.txt
आपण वापरल्यास -c केवळ सामन्यांची संख्या मोजू शकते, किंवा न जुळणार्या ओळींची संख्या दर्शविण्यासाठी ते -v सह उलटा करा. उदाहरणार्थ:
egrep -c "include" main.c
egrep -v -c "include" main.c
आणि अगदी ओळ क्रमांक दर्शवा जिथे सामना झाला आणि त्या अनुक्रमे ज्या स्थानावर आहे:
egrep -n "void" hola.c
egrep -o -b "printf" hola.c
आणि सोबत नियमित अभिव्यक्ती त्याची क्षमता वाढविली जाऊ शकते. उदाहरणार्थ, हॅलोपासून सुरू होणारी आणि बायसह समाप्त होणारी एखादी ओळ शोधा किंवा हॅलोपासून त्यानंतर जे काही सुरू होईल आणि त्यानंतर अनुक्रमे मॅच बाय दिसून येईलः
* पुढील आज्ञा दुरुस्त करणे: त्रुटी आढळल्यामुळे वाचक मॅन्युअल अल्कोसेर यांच्या टिप्पणीबद्दल धन्यवाद, मी खालील आदेशात बदल करण्यास सक्षम आहे.
egrep '^Hola.*adiós$' ejemplo.txt
egrep "Hola.*adiós" ejemplo.txt
परंतु जर आपल्याला ग्रीपच्या फरकांबद्दल आश्चर्य वाटले तर येथे एक उदाहरण आहे जे हे आपल्यासाठी स्पष्ट करेल ... ग्रीप वापरण्याच्या बाबतीत - ईशिवाय आपण हे वापरावे सुटण्याच्या क्रम जेणेकरून ते अशा खास वर्णांचे स्पष्टीकरण देईल, अन्यथा ते नमुना अशा गोष्टी विचारात न घेता समजावून सांगेल. दुसरीकडे, एस्प्रेप किंवा ग्रीप-ई सह ते त्यांच्या लक्षात घेतील. उदाहरणार्थ:
grep '^no\(fork\|group\)' /etc/group
ते समतुल्य असेलः
grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group
म्हणजेच ते नोफोर्क किंवा नोग्रूपपासून सुरू होणार्या जुळणार्या ओळी शोधत आहे. परंतु आपण एस्केप सीक्वेन्सशिवाय ग्रीपची पहिली अभिव्यक्ती वापरली असल्यास ते काय होते ते म्हणजे शोध ठोस नमुना नाही (काटा | गट):
grep 'no(fork|group)' /etc/group
आपण शोध घेऊ शकता अल्फान्यूमेरिक श्रेणीकिंवा विशिष्ट मूल्ये, जसे की विशिष्ट आयपी शोधण्यासाठीः
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks
आपण प्राधान्य दिल्यास, अधिक विशिष्ट शोध करण्यासाठी आपण इतर नियमित अभिव्यक्ती वापरू शकता. उदाहरणार्थ | एक शोधण्यासाठी योगायोग किंवा इतर:
egrep -i '^(printf|scanf)' hola.c
आपण शोधू शकता अपरकेस, लोअरकेस, केवळ वर्णमाला किंवा वर्णमाला इ., जसे की: [: alnum:], [: alpha:], [: अंक:], [: लोअर:], [: प्रिंट:], [: पंट:], [: स्पेस:], [ : वरचे:] इ. उदाहरणार्थ, अपरकेस शोधण्यासाठी:
egrep [[:upper:]] diccioario
मला आशा आहे की हे आपणास मदत करेल ... लवकरच मी त्यास विशेषतः समर्पित लेखात नियमित अभिव्यक्ती स्पष्ट करेन ...
5 टिप्पण्या, आपल्या सोडा
शुभ दुपार
काही टिप्पण्या ...
तुम्ही 'एग्रीप' कमांड समजावून सांगा पण 'एग्रीप' आणि 'ग्रीप' मधील फरक देऊ नका, जे येथे आहे तेच असावे.
उदाहरणार्थ:
ग्रीप सहः आयपी -4 ए | ग्रेप '[०-]] \ +'
एग्रीप सहः आयपी -4 ए | egrep '[०-]] +'
अहो, आणि हे चुकीचे आहे, 'egrep "हॅलो. * बाय" उदाहरण.txt'; येथे यश येते जेव्हा फाईलमध्ये 'हॅलो' ही स्ट्रिंग असते आणि त्यानंतर 'अलविदा' असते तेव्हा ही ओळ खरोखरच सुरू होऊ शकते आणि जे काही संपेल ती समाप्त होऊ शकते.
हा लेख म्हणतो ते असेः
egrep '^ हॅलो. * बाय $' उदाहरण.txt
आणि सर्व पर्याय किंवा जवळजवळ सर्व (मी हे तपासण्यास थांबत नाही) हे केवळ 'एग्रीप' चे नाही तर 'ग्रीप' चे पर्याय आहेत.
बेस्ट विनम्र
त्या त्रुटीबद्दल कळविल्याबद्दल धन्यवाद. आपण नियमित अभिव्यक्तींवर काय टिप्पणी करता ते मी दुसर्या परिच्छेदात आधीच ठेवले आहे. मी त्यांना एक विशिष्ट लेख अर्पण करीन, कारण बरेच आहेत आणि या लेखास बराच वेळ लागेल. शुभेच्छा!
पुन्हा नमस्कार, इसहाक.
दुसर्या परिच्छेदात तुम्ही मुळात म्हणाल किंवा म्हणायला हवे होते की 'एग्रीप' हे 'ग्रीप-ई' चे एक उपनाव आहे, परंतु 'एग्रीप' वापरण्याचे काही नियमित अभिव्यक्तीचे उदाहरण दिले नाही जे त्यापेक्षा वेगळे लिहिलेले असते. ग्रीप द्वारे वापरले.
वाढीव नियमित अभिव्यक्तींचे स्पष्टीकरण देण्यासाठी एखाद्या लेखात समर्पण करणे मला इतर गोष्टींबरोबरच वाईट वाटते कारण अशा प्रकारच्या साइट्स जी जाहिराती देत नाहीत आणि जीएनयू समुदायासाठी खूप महत्वाची माहिती देणारी कामे करीत आहेत: https://www.rexegg.com/
मी येथे ट्रोलिंगसाठी लिहित नाही, या सर्वांसह माझा हेतू असा आहे की जर कोणी 'एस्प्रे' किंवा 'ग्रीप' काय करते हे पाहण्यासाठी जर कोणी ही नोंद वाचली असेल तर कृपया इतर स्त्रोतांकडे पहा, ही नोंद कोणत्याही गोष्टीचा संदर्भ असू शकत नाही, हे स्पष्ट करते थोडे, वाईटरित्या, अनावश्यक माहिती ऑफर करते आणि गोंधळ घालणारे असू शकते, खासकरुन ज्यांना GNU आणि त्याद्वारे ऑफर केलेली शक्तिशाली साधने माहित नाहीत.
शेवटी, मी माझ्या पहिल्या टिप्पणीनंतर (^ $) सूचित केलेला दोष आपण जोडला आणि निश्चित केला आहे. इतर साइट प्रमाणे, आपण ज्याने दुरुस्ती केली त्या व्यक्तीचा उल्लेख केला पाहिजे, किंवा किमान असे म्हटले पाहिजे की ते एक दुरुस्ती आहे, जीएनयू तळाचा भाग आहे, ज्या बेसवर हा ब्लॉग सुरू झाला होता आणि तो हरवला गेला आहे.
ग्रीटिंग्ज
आपल्या दृष्टिकोनाबद्दल धन्यवाद.
ffff