टर्मिनल के साथ: नियमित अभिव्यक्ति का उपयोग करना

लिनक्स टर्मिनल के बारे में जो चीजें मुझे हमेशा पसंद हैं उनमें से एक है जिसे आप नियमित अभिव्यक्तियों का उपयोग करके प्राप्त कर सकते हैं। चाहे हमें जटिल पाठ खोजने की आवश्यकता हो या इसे किसी और चीज़ से बदलना हो, नियमित अभिव्यक्ति का उपयोग करके नौकरी को सरल बनाया जा सकता है। शुरुआत से शुरू करें:

चेतावनी: यह पोस्ट गधे में दर्द है। इस पोस्ट को हर समय पढ़ने से चेतना का नुकसान हो सकता है। बीच में ब्रेक लें या पूरी पोस्ट पढ़ने से पहले अपने डॉक्टर या फार्मासिस्ट से पूछें।

एक नियमित अभिव्यक्ति क्या है?

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

नियमित अभिव्यक्ति बनाम फ़ाइल पैटर्न।

इससे पहले कि मैं नियमित अभिव्यक्तियों में उतरूं, मैं नियमित अभिव्यक्तियों के बारे में एक आम गलतफहमी को दूर करना चाहता हूं। एक नियमित अभिव्यक्ति वह नहीं है जो हम हार्ड ड्राइव पर विभिन्न फाइलों को संदर्भित करने के लिए rm, cp, आदि जैसी कमांड में एक पैरामीटर के रूप में डालते हैं। यह एक फ़ाइल पैटर्न होगा। नियमित अभिव्यक्तियाँ, हालांकि इसी तरह वे कुछ सामान्य पात्रों का उपयोग करती हैं, अलग हैं। एक फाइल पैटर्न को हार्ड डिस्क पर मौजूद फाइलों के खिलाफ निकाल दिया जाता है और जो पैटर्न से पूरी तरह मेल खाता है, उसे वापस लौटा देता है, जबकि एक रेगुलर एक्सप्रेशन को टेक्स्ट के खिलाफ निकाल दिया जाता है और उन लाइनों को लौटा देता है जिनमें सर्च किए गए टेक्स्ट होते हैं। उदाहरण के लिए, पैटर्न के अनुरूप नियमित अभिव्यक्ति *.* यह कुछ इस तरह होगा ^.*\..*$

नियमित अभिव्यक्ति के प्रकार।

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

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

नियमित अभिव्यक्ति का परीक्षण।

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

पहले एक grep कमांड है। यह वह कमांड है जिसका उपयोग हम अक्सर सर्च करने के लिए करते हैं। सिंटैक्स निम्नानुसार है:

grep [-E] 'REGEX' FICHERO
COMANDO | grep [-E] 'REGEX'

मैं हमेशा सिंगल कोट्स में रेग्युलर एक्सप्रेशन डालने की सलाह देता हूं, ताकि शेल ऊपर न जाए। पहला तरीका एक फ़ाइल में एक नियमित अभिव्यक्ति ढूंढना है। दूसरा नियमित अभिव्यक्ति के माध्यम से कमांड के आउटपुट को फ़िल्टर करने की अनुमति देता है। डिफ़ॉल्ट रूप से, grep बुनियादी नियमित अभिव्यक्तियों का उपयोग करता है। -E विकल्प विस्तारित नियमित अभिव्यक्तियों का उपयोग करने के लिए है।

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

GREP_OPTIONS=--color

हम इसे .bashrc में हमेशा सक्रिय करने के लिए रख सकते हैं।

नियमित अभिव्यक्ति का उपयोग करने का एक और तरीका सेड कमांड का उपयोग करना है। यह पाठ को बदलने के लिए अधिक उपयुक्त है, लेकिन इसका उपयोग खोज के लिए भी किया जा सकता है। इसके लिए वाक्य रचना इस तरह होगी:

sed -n[r] '/REGEX/p' FICHERO
COMANDO | sed -n[r] '/REGEX/p'

सीड कमांड डिफ़ॉल्ट रूप से बुनियादी नियमित अभिव्यक्तियों का भी उपयोग करता है, आप -r विकल्प के साथ विस्तारित नियमित अभिव्यक्तियों का उपयोग कर सकते हैं।

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

awk '/REGEX/' FICHERO
COMANDO | awk '/REGEX/'

यह कमांड हमेशा एक्सटेंडेड रेगुलर एक्सप्रेशन का उपयोग करता है।

हमारे परीक्षणों को करने के लिए हमें एक पाठ की भी आवश्यकता होगी जो इसे खोजने के लिए एक उदाहरण के रूप में काम करेगा। हम निम्नलिखित पाठ का उपयोग कर सकते हैं:

- Lista de páginas wiki:

ArchLinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/

- Fechas de lanzamiento:

Arch Linux: 11-03-2002
Gentoo: 31/03/2002
CentOs: 14-05-2004 03:32:38
Debian: 16/08/1993
Ubuntu: 20/10/2004

Desde Linux Rulez.

यह वह पाठ है जिसका उपयोग मैं बाकी पोस्ट में उदाहरणों के लिए करूंगा, इसलिए मैं आपको यह सलाह देता हूं कि आप इसे एक फ़ाइल में कॉपी कर लें ताकि टर्मिनल से इसे काम में लिया जा सके। आप जो चाहें नाम डाल सकते हैं। मैंने इसे रेगेक्स कहा है।

शुरुआत पाठ।

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

सभी में सबसे सरल है एक विशिष्ट शब्द की खोज करना, उदाहरण के लिए, मान लें कि हम उन सभी लाइनों की खोज करना चाहते हैं जिनमें "लिनक्स" शब्द है। यह सबसे आसान है, क्योंकि हमें केवल लिखना है:

grep 'Linux' regex

और हम परिणाम देख सकते हैं:

मेहराबLinux: https://wiki.archlinux.org/ आर्क Linux: 11-03-2002 से Linux रूलज़

ये तीन लाइनें हैं जिनमें "लिनक्स" शब्द शामिल है, जो कि अगर हमने कलर ट्रिक का उपयोग किया है, तो हाइलाइट किया हुआ दिखाई देगा। ध्यान दें कि यह उस शब्द को पहचानता है जिसे हम खोज रहे हैं भले ही यह "आर्कलिनक्स" के समान लंबे शब्द का हिस्सा हो। हालाँकि, यह शब्द "linux" को उजागर नहीं करता है जो URL "https://wiki.archlinux.org/" में दिखाई देता है। ऐसा इसलिए है क्योंकि यह लोअरकेस "एल" के साथ दिखाई देता है और हमने इसे अपरकेस में देखा है। Grep कमांड के पास इसके लिए विकल्प हैं, लेकिन मैं नियमित अभिव्यक्ति से संबंधित लेख में उनके बारे में बात नहीं करने जा रहा हूं।

इस सरल परीक्षण के साथ हम पहला निष्कर्ष निकाल सकते हैं:

  • एक सामान्य चरित्र एक नियमित अभिव्यक्ति में ही मेल खाता है।

कहने का मतलब यह है कि यदि आप "a" अक्षर को "a" अक्षर के लिए देखेंगे। यह तर्कसंगत लगता है, है ना? 🙂

अब मान लीजिए कि हम "सेंटो" शब्द की खोज करना चाहते हैं, उसके बाद किसी भी चरित्र का, लेकिन केवल एक चरित्र। इसके लिए हम "।" चरित्र का उपयोग कर सकते हैं, जो एक वाइल्डकार्ड है जो किसी भी वर्ण से मेल खाता है, लेकिन केवल एक:

grep 'CentO.' regex

और परिणाम है:

CentOS: http://wiki.centos.org/
Centos: 14-05-2004 03:32:38

जिसका अर्थ है कि इसमें "CentOS" में "S" शामिल है, हालांकि एक मामले में यह अपरकेस और दूसरे लोअरकेस में है। यदि कोई अन्य पात्र उस स्थान पर दिखाई देता है, तो उसमें यह भी शामिल होगा। हमारे पास पहले से ही दूसरा नियम है:

  • चरित्र "।" किसी भी पात्र से मेल खाता है।

यह अब उतना तुच्छ नहीं है जितना यह लग रहा था, लेकिन इसके साथ हम बहुत कुछ नहीं कर सकते। थोड़ा और आगे चलते हैं। मान लीजिए कि हम उस रेखा को खोजना चाहते हैं जिसमें वर्ष 2002 और 2004 दिखाई देते हैं। वे दो खोजों की तरह प्रतीत होते हैं, लेकिन उन्हें इस तरह से एक बार में किया जा सकता है:

grep '200[24]' regex

जिसका अर्थ है कि हम २ या ४ to के बाद २०० नंबर खोजना चाहते हैं और इसका परिणाम यह है:

आर्क लिनक्स: 11-03-2002
Gentoo: 31/03 /2002
सेंटो: 14-05-2004 03:32:38
Ubuntu: 20/10/2004

जो हमें तीसरे नियम में लाता है:

  • कोष्ठक में संलग्न एकाधिक वर्ण कोष्ठक के भीतर के किसी भी वर्ण से मेल खाते हैं।

कोष्ठक अधिक नाटक देते हैं। उनका उपयोग पात्रों को बाहर करने के लिए भी किया जा सकता है। उदाहरण के लिए, मान लें कि हम उन साइटों को ढूंढना चाहते हैं जहां ":" चरित्र दिखाई देता है, लेकिन "/" का पालन नहीं किया जाता है। कमांड इस तरह होगी:

grep ':[^/]' regex

यह ब्रैकेट के अंदर पहले वर्ण के रूप में "^" डालने की बात है। आप अपने इच्छित सभी वर्ण नीचे रख सकते हैं। इस अंतिम आदेश का परिणाम निम्नलिखित है:

Archlinux: https://wiki.archlinux.org/
Gentoo: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
Debian: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
Arch Linux: 11-03-2002 जेंटू: 31/03/2002 सेंटो: 14 - 05 2004 03:32:38 डेबियन: 16/08/1993 Ubuntu: 20/10/2004

अब डिस्ट्रो नामों के पीछे ":" डाला जाता है, लेकिन URL में नहीं क्योंकि URL में उनके बाद "/" होता है।

  • ब्रैकेट की शुरुआत में "^" वर्ण को किसी भी वर्ण को ब्रैकेट में छोड़कर अन्य वर्णों से मेल खाता है।

एक और चीज जो हम कर सकते हैं वह है वर्णों की एक श्रृंखला। उदाहरण के लिए, "-" के बाद किसी भी संख्या की खोज करना इस तरह दिखेगा:

grep '[0-9]-' regex

इसके साथ हम एक वर्ण को 0 और 9 के बीच निर्दिष्ट कर रहे हैं और फिर एक ऋण चिह्न। आइए देखें रिजल्ट:

आर्क लिनक्स: 11-03-2002 सेंटो: 14-05-2004 03 32: 38

एकल वर्णों के साथ कई श्रेणियों को ब्रैकेट के भीतर भी निर्दिष्ट किया जा सकता है।

  • कोष्ठक के अंदर "-" द्वारा अलग किए गए दो वर्णों को श्रेणी के भीतर किसी भी वर्ण से मेल खाता है।

आइए अब देखें कि क्या हम URL के पहले भाग का चयन कर सकते हैं। वह जो "http" या "https" कहता है। वे केवल अंतिम "एस" में भिन्न होते हैं, तो चलो इसे निम्नानुसार करते हैं:

grep -E 'https?' regex

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

आर्चलिनक्स: hTTPS: //wiki.archlinux.org/ जेंटू: hTTPS: //wiki.gentoo.org/wiki/Main_Page CentOS: http: //wiki.centos.org/ डेबियन: hTTPS: //wiki.debian.org/ उबंटू: hTTPS: //wiki.ubuntu.com/

इसलिए हमारे पास एक नया नियम है:

  • एक चरित्र "द्वारा पीछा किया?" उस चरित्र से मेल खाता है या कोई नहीं। यह केवल विस्तारित नियमित अभिव्यक्तियों के लिए मान्य है।

अब हम दो बिल्कुल अलग शब्दों की तलाश करने जा रहे हैं। आइए देखें कि उन पंक्तियों को कैसे खोजें, जिनमें "डेबियन" और "उबंटू" दोनों शब्द हैं।

grep -E 'Debian|Ubuntu' regex

ऊर्ध्वाधर पट्टी के साथ हम दो या अधिक अलग-अलग नियमित अभिव्यक्तियों को अलग कर सकते हैं और उन पंक्तियों की तलाश कर सकते हैं जो उनमें से किसी से मेल खाती हैं:

डेबियन: https://wiki.debian.org/
Ubuntu: https://wiki.ubuntu.com/
डेबियन: 16 / / 08 1993
Ubuntu: 20 / / 10 2004
  • चरित्र «|» कई नियमित अभिव्यक्तियों को अलग करने के लिए कार्य करता है और उनमें से किसी से मेल खाता है। यह विस्तारित नियमित अभिव्यक्तियों के लिए भी विशिष्ट है।

आगे बढाते हैं। अब हम "लिनक्स" शब्द की तलाश करने जा रहे हैं, लेकिन केवल जहां यह बाईं ओर किसी अन्य शब्द के लिए अटक नहीं है। हम इसे इस तरह से कर सकते हैं:

grep '\

यहाँ महत्वपूर्ण चरित्र "<" है, लेकिन इसके सामने "\" डालकर बच निकलने की आवश्यकता है ताकि grep इसे एक विशेष चरित्र के रूप में व्याख्या करे। परिणाम इस प्रकार है:

मेहराब Linux: 11-03-2002 से Linux रूलज़

आप "\>" का उपयोग उन शब्दों को खोजने के लिए भी कर सकते हैं जो एक दूसरे के ठीक बगल में नहीं हैं। एक उदाहरण के साथ चलते हैं। आइए इस कमांड को आजमाएँ:

grep 'http\>' regex

इसका उत्पादन यह है:

CentOS: http: //wiki.centos.org/

"Http" सामने आया, लेकिन "https" नहीं, क्योंकि "https" में अभी भी "p" के दाईं ओर एक वर्ण है जो किसी शब्द का हिस्सा हो सकता है।

  • वर्ण "<" और ">" क्रमशः एक शब्द की शुरुआत और अंत से मेल खाते हैं। इन पात्रों को बचना चाहिए ताकि उन्हें शाब्दिक पात्रों के रूप में व्याख्यायित न किया जाए।

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

grep -E ':[0-9]+' regex

परिणाम:

सेंटो: 14-05-2004 03: 32: 38

संख्या 38 को भी हाइलाइट किया गया है क्योंकि यह भी ":" से शुरू होता है।

  • "+" वर्ण अपने बाईं ओर के चरित्र से मेल खाता है, कम से कम एक बार दोहराया जाता है।

आप "{" और "}" का उपयोग करके पुनरावृत्ति की संख्या को भी नियंत्रित कर सकते हैं। विचार एक संख्या को ब्रेसिज़ में रखना है जो सटीक संख्या को इंगित करता है जिसे हम चाहते हैं। आप एक सीमा भी रख सकते हैं। आइए दो मामलों के उदाहरण देखें।

पहले हम सभी चार अंकों के अनुक्रमों को खोजने जा रहे हैं:

grep '[0-9]\{4\}' regex

ध्यान दें कि यदि हम बुनियादी नियमित अभिव्यक्तियों का उपयोग कर रहे हैं तो घुंघराले ब्रेसिज़ से बच जाना चाहिए, लेकिन यदि हम विस्तारित लोगों का उपयोग नहीं करते हैं। विस्तारित के साथ यह इस प्रकार होगा:

grep -E '[0-9]{4}' regex

और दोनों मामलों में परिणाम यह होगा:

आर्क लिनक्स: 11-03-2002
Gentoo: 31/03 /2002
सेंटो: 14-05-2004 03:32:38
Debian: 16/08/1993
उबंटू: 20/10 /2004
  • वर्ण "{" और "}" के बीच की संख्या के साथ एक संख्या पिछले चरित्र से मेल खाती है जो निर्दिष्ट संख्या को दोहराती है।

अब ब्रेसिज़ के साथ दूसरा उदाहरण। मान लीजिए कि हम ऐसे शब्द ढूंढना चाहते हैं जिनमें 3 और 6 लोअरकेस अक्षर हों। हम निम्नलिखित कर सकते हैं:

grep '[a-z]\{3,6\}' regex

और परिणाम यह होगा:

- एलISTA de पेजs विकि: सेवाआरसीएचLइनक्स: hTTPS:/ /विकि.archlinux.org/ जीप्रवेश करना: hTTPS:/ /विकि.Gentoo.org/विकि/Mऐन_Pउम्र
Centओएस: http:/ /विकि.centos.org/ डीएबियान: hTTPS:/ /विकि.डेबियन.org/ याबंटू: hTTPS:/ /विकि.ubuntu.कॉम/ - एफतुम्हें याद आती है de लांच: सेवाआरसीएच Lइनक्स: 11-03-2002 जीप्रवेश करना: 31/03/2002 सीentOs: 14-05-2004 03:32:38
Dएबियान: 16/08/1993 यूबंटू: 20/10/2004 डीयह है Lइनक्स Rउलेज़.

जैसा कि आप देख सकते हैं, जैसा हम चाहते थे वैसा नहीं दिखता। ऐसा इसलिए है क्योंकि नियमित अभिव्यक्ति अन्य शब्दों के भीतर अक्षरों को ढूंढती है जो लंबे हैं। आइए इस अन्य संस्करण की कोशिश करें:

grep '\<[a-z]\{3,6\}\>' regex

परिणाम:

- पृष्ठों की सूची विकि: आर्चलिनक्स: hTTPS:/ /विकि.आर्कलिनक्सorg/ जेंटू: hTTPS:/ /विकि.Gentoo.org/विकि/ Main_Page CentOS: http:/ /विकि.centos.org/ डेबियन: hTTPS:/ /विकि.डेबियन.org/ उबंटू: hTTPS:/ /विकि.ubuntu.कॉम/

यह पहले से ही वैसा ही दिखता है जैसा हम चाहते थे। हमने जो किया है, उसके लिए यह आवश्यक है कि शब्द पहले अक्षर से ठीक पहले शुरू हो और अंतिम के ठीक बाद समाप्त हो।

  • वर्ण "{" और "}" के बीच दो नंबरों के साथ एक अल्पविराम द्वारा अलग किए गए पिछले चरित्र ने दो संख्याओं द्वारा इंगित समय की संख्या को दोहराया।

आइए अब एक ऐसे चरित्र को देखें जो "+" का प्रमुख है। यह "*" है और इसका संचालन केवल इतना ही है कि यह शून्य सहित किसी भी वर्ण से मेल खाता है। यही है, यह "+" के समान ही करता है लेकिन पाठ में छपने के लिए इसके बायें वर्ण की आवश्यकता नहीं है। उदाहरण के लिए, आइए उन पतों की तलाश करें जो विकि पर शुरू होते हैं और org पर समाप्त होते हैं:

grep 'wiki.*org' regex

आइए देखें रिजल्ट:

ArchLinux: https: //wiki.archlinux.org/ जेंटू: https: //wiki.gentoo.org/ विकी / मेन_पेज CentOS: http: //wiki.centos.org/ डेबियन: https: //wiki.debian.org/

बिल्कुल सही।

अब आखिरी किरदार जिसे हम देखने जा रहे हैं। चरित्र "\" का उपयोग चरित्र को उसके अधिकार से बचने के लिए किया जाता है ताकि वह अपना विशेष अर्थ खो दे। उदाहरण के लिए: मान लीजिए कि हम एक बिंदु के साथ समाप्त होने वाली रेखाओं का पता लगाना चाहते हैं। पहली चीज जो हमारे लिए हो सकती है वह यह हो सकती है:

grep '.$' regex

परिणाम वह नहीं है जो हम खोज रहे हैं:

- विकि पृष्ठों की सूची:
आर्कलिनक्स: https://wiki.archlinux.org/
जेंटू: https://wiki.gentoo.org/wiki/Main_Page
सेंटोस: http://wiki.centos.org/
डेबियन: https://wiki.debian.org/
उबंटू: https://wiki.ubuntu.com/
- रिलीज की तारीख: आर्क लिनक्स: 11-03-2002
Gentoo: 31/03/2002
CentOs: 14-05-2004 03:32:38
डेबियन: 16/08/1993
उबंटू: 20/10/2004
Desde Linux रूलज़.

इसका कारण है "।" यह किसी भी चीज से मेल खाता है, इसलिए यह नियमित अभिव्यक्ति प्रत्येक पंक्ति के अंतिम चरित्र से मेल खाता है जो भी यह है। समाधान यह है:

grep '\.$' regex

अब परिणाम वही है जो हम चाहते हैं:

Desde Linux रूलज़.

खेल खत्म

यद्यपि नियमित अभिव्यक्तियों का विषय इतना जटिल है कि मैं लेखों की एक श्रृंखला के लिए दूंगा, मुझे लगता है कि मैंने आपको पहले ही पर्याप्त दर्द दे दिया है। यदि आप आने में कामयाब रहे, तो बधाई। और अगर आपने यह सब एक बार में पढ़ा है, तो एक एस्पिरिन या कुछ और लें, क्योंकि यह अच्छा नहीं हो सकता।

अभी के लिए बस इतना ही। यदि आप इस लेख को पसंद करते हैं, तो शायद आप एक और लिख सकते हैं। इस बीच, मैं आपको टर्मिनल में सभी नियमित अभिव्यक्तियों की कोशिश करने की सलाह देता हूं कि वे कैसे काम करते हैं। और याद रखें: केवल चक नॉरिस नियमित भावों का उपयोग करके HTML को पार्स कर सकता है।


अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   ईजेकील कहा

    रेगेक्स के बिना हमारा जीवन कैसा होगा?
    लेख बहुत उपयोगी है, लेकिन मैं इसे बहुत कम पढ़ूंगा। बहुत बहुत धन्यवाद।

    1.    हेक्सबॉर्ग कहा

      टिप्पणी के लिए धन्यवाद। मुझे अभी भी विश्वास नहीं हो रहा है कि मेरा लेख सामने आया है। Out यह कुछ त्रुटि के साथ सामने आया है, लेकिन मुझे आशा है कि यह उपयोगी है। 🙂

  2.   स्कालिबुर कहा

    धन्यवाद!

    कुछ समय पहले मुझे नियमित अभिव्यक्तियों के बारे में थोड़ा अध्ययन करना था .. .. मैं आपको शिक्षण के लिए धन्यवाद देता हूं .. और चरण-दर-चरण गाइड उनमें से प्रत्येक को जानने के लिए ..

    बहुत अच्छा! .. .. मैं उस एस्पिरिन लेने जा रहा हूँ .. ee

    1.    हेक्सबॉर्ग कहा

      आपका स्वागत है। साहस और वह नियमित भाव आपके साथ नहीं हो सकता। 🙂

  3.   तनराक्स कहा

    शानदार पोस्ट! अच्छा काम। मुझे आश्चर्य है कि आपको कितने घंटे लगे it

    1.    हेक्सबॉर्ग कहा

      जबरदस्त हंसी!! सवाल यह है कि अगर मुझे वह सब कुछ कहना था जो मैंने कहने का इरादा किया था तो मुझे कितने घंटे लगेंगे? अनंत !! 🙂

  4.   तमुज कहा

    एक बात मैं नहीं जानता था, अच्छा लेख!

    1.    हेक्सबॉर्ग कहा

      धन्यवाद। इसे आपके साथ साझा करना खुशी की बात है।

  5.   हेलेना_रयूयू कहा

    महान व्याख्या। बधाई! वास्तव में उपयोगी!

    1.    हेक्सबॉर्ग कहा

      मुझे खुशी है कि आपने इसे उपयोगी पाया। तो यह लिखने के लिए एक खुशी है।

  6.   विरोधी कहा

    यह कहीं विशेष जाना चाहिए। फीचर्ड की तरह लेकिन एक बहुत ही विशिष्ट उपयोगिता है। काफी उपयोगी है, हालांकि मैं यह विम पर लागू देखना चाहते हैं।

    1.    हेक्सबॉर्ग कहा

      यह खुद से पूछने का सवाल है। मेरे मन में नियमित अभिव्यक्तियों पर कुछ और लेख हैं। और मैं उनमें विम के बारे में बात कर सकता था। इस लेख में मैंने जो कुछ समझाया है, उससे इसके कुछ अंतर हैं। यह उसके साथ होने की बात है। 🙂

  7.   फर्नांडो कहा

    अच्छा!

    आपका लेख बहुत अच्छा है, यह उत्सुक है, हाल ही में (अभी) मैंने अपनी वेबसाइट पर एक प्रविष्टि प्रकाशित की है जिसे मैं कुछ दिनों से तैयार कर रहा था जहां मैंने नियमित अभिव्यक्ति और कुछ उदाहरणों के लिए मेटाकैरेक्टर की एक सूची एकत्र की है। और प्रवेश करना उचित रहा है DesdeLinux और उसी विषय पर एक प्रविष्टि देखें!

    यदि यह किसी भी सांत्वना है, तो मेरा बहुत अधिक ation है

    निश्चित रूप से रेगेक्स सबसे उपयोगी चीजों में से एक है, मैं आमतौर पर कमांड के आउटपुट को ट्रिम करने के लिए उनका उपयोग करता हूं और उस हिस्से को रखता हूं जो मुझे दिलचस्पी देता है, और फिर इसके साथ बैश स्क्रिप्ट में बातचीत करता है, उदाहरण के लिए। मैंने उन्हें विश्वविद्यालय में भी इस्तेमाल किया है, और वे संकलक के निर्माण में महत्वपूर्ण हैं (लेक्सिकोग्राफिक और पार्सर्स की परिभाषा में)। संक्षेप में, एक पूरी दुनिया।

    अभिवादन और बहुत अच्छा काम।

    1.    हेक्सबॉर्ग कहा

      बहुत बहुत धन्यवाद.

      मुझे आपका लेख भी पसंद आया। यह मेरी तुलना में अधिक संक्षिप्त है। यह एक त्वरित संदर्भ के रूप में काम कर सकता है। यह एक संयोग है कि हमने उन्हें उसी समय लिखा है। आप देख सकते हैं कि लोग विषय में रुचि रखते हैं। 🙂

  8.   ऐलरी कहा

    Dummies =) के लिए नियमित अभिव्यक्ति, अब यह मेरे लिए और अधिक स्पष्ट है, जिस तरह से grep के लिए रंग के साथ उत्पादन करने का एक तरीका है, .bashrc उर्फ ​​grep = 'grep -color = always' के मामले में एक उपनाम बनाकर। यह किसी के लिए काम करता है।

    सादर

    1.    हेक्सबॉर्ग कहा

      सच। इसे करने का एक और तरीका है। इनपुट के लिए धन्यवाद। 🙂

  9.   KZKG ^ गारा कहा

    O_O ... अंशदान का अंश !!! O_O ...
    पोस्ट के लिए बहुत बहुत धन्यवाद, मैं कुछ इस तरह की प्रतीक्षा कर रहा था कि थोड़ी देर के लिए, मैं इसे पढ़ने के लिए खुला छोड़ देता हूं ताकि घर पर शांति से शून्य परेशानी हो।

    लेख के लिए धन्यवाद, मैं वास्तव में I करता हूं

    1.    हेक्सबॉर्ग कहा

      मुझे पता था कि आप इसे पसंद करेंगे। जबरदस्त हंसी!! सच्चाई यह है कि कई चीजें गायब हैं, लेकिन मेरे पास पहले से ही एक दूसरा हिस्सा है। 🙂

  10.   एलिसेर टाटेस कहा

    महान लेख, यदि केवल मैंने इसे कल पढ़ा था, तो आज मैंने जो कक्षा दी, वह मेरे छात्रों के लिए और भी आसान होती!

    1.    हेक्सबॉर्ग कहा

      जबरदस्त हंसी!! बहुत बुरा मुझे देर हो गई, लेकिन खुशी है कि यह मददगार है। 🙂

  11.   लियो टोरो कहा

    अंत में !!!, सुपर अच्छा पोस्ट… .मैंने आखिरकार कुछ ऐसा पाया जो स्पष्ट रूप से नियमित अभिव्यक्ति बताता है… ..

    1.    हेक्सबॉर्ग कहा

      वहाँ बहुत सारी जानकारी है, लेकिन कुछ ऐसा खोजना अधिक कठिन है जिसे समझना आसान है। मुझे खुशी है कि मैंने वह अंतर भर दिया। 🙂

      नमस्ते.

  12.   शेक्सपियर रोड्स कहा

    अरे मुझे मदद की ज़रूरत है, मुझे प्रारूप के साथ / var / लॉग में एक खोज करना है: yymmdd, और लॉग इस तरह हैं 130901.log -130901.log, मुझे उन सभी को खोजना होगा जो 1 सितंबर से अक्टूबर के बीच हैं 11, केवल एक चीज जो मैं करने में कामयाब रहा, वह सभी सितंबर को हटा दिया गया था, लेकिन मुझे नहीं पता कि पूरी श्रृंखला कैसे करें:

    ex: 1309 [0-3] मुझे 1 से 30 सितंबर के बीच के लॉग लौटाता है, लेकिन मुझे नहीं पता कि 1 से 11 अक्टूबर तक एक ही चेन में कैसे लाया जाए।

    1.    हेक्सबॉर्ग कहा

      नियमित अभिव्यक्ति का उपयोग करने के लिए यह थोड़ा जटिल है। मेरे साथ ऐसा होता है कि ऐसा कुछ काम कर सकता है:

      13(09[0-3]|10(0|1[01]))

      यह एक विस्तारित नियमित अभिव्यक्ति है। आप यह नहीं कहते कि आप किस उपकरण का उपयोग कर रहे हैं, इसलिए मैं आपको अधिक जानकारी नहीं दे सकता।

      वैसे भी मुझे लगता है कि यह नियमित अभिव्यक्ति का उपयोग करने के बजाय मामला है इसे खोजने के साथ करना बेहतर है। आप कुछ इस तरह की कोशिश कर सकते हैं:

      खोजो। -newermt '01 sep '-a! -newermt '11 oct '-प्रिंट

      भाग्य। आशा है इससे आपको सहायता मिलेगी।

  13.   चिपको कहा

    नमस्कार! सबसे पहले, मैं आपको अपने काम के लिए धन्यवाद देना चाहता था क्योंकि यह पृष्ठ सर्वश्रेष्ठ लिनक्स साइटों के मेरे "शीर्ष 3" में है।
    मैं अभ्यास कर रहा था और मुझे नहीं पता था कि एक फोन नंबर पर एक RegExp मेरे लिए काम क्यों नहीं करता था और यह था कि मुझे "-ई" (जो मुझे इस पोस्ट के लिए धन्यवाद मिला) याद आ रहा था।
    मैं आपसे पूछना चाहता हूं कि क्या आप एक अच्छी पीडीएफ या साइट नहीं जानते हैं जहां RegExp पर अभ्यास हो, हालांकि थोड़ी कल्पना के साथ आप उन्हें खुद का आविष्कार करने का अभ्यास कर सकते हैं।

    अभिवादन, पाब्लो

  14.   कैली कहा

    बहुत अच्छा, मैंने अभी यह सब पढ़ा है, और हाँ अब मुझे एस्पिरिन की आवश्यकता है read

  15.   ऑस्कर कहा

    सबसे अच्छा स्पष्टीकरण मैंने नियमित अभिव्यक्तियों को देखा है। इस काम को साझा करने के लिए लेखक को मेरा धन्यवाद।

    एक ग्रीटिंग.

  16.   अलेक्जेंडर कहा

    मुझे वास्तव में बहुत अच्छी व्याख्या पसंद आई