টার্মিনাল সহ: নিয়মিত এক্সপ্রেশন ব্যবহার করে

লিনাক্স টার্মিনাল সম্পর্কে আমি সবসময় যে বিষয়গুলিকে পছন্দ করেছি তা হ'ল নিয়মিত এক্সপ্রেশন ব্যবহার করে অর্জন করা যায়। আমাদের জটিল পাঠ্য সন্ধান করতে হবে বা অন্য কিছু দিয়ে এটি প্রতিস্থাপন করা হোক না কেন, নিয়মিত প্রকাশের সাহায্যে কাজটি ব্যাপকভাবে সহজ করা যায়। শুরু দিয়ে শুরু করা যাক:

সতর্কতা: এই পোস্টটি একটি গাধা মধ্যে ব্যথা হয়। এই পোস্টটি সবসময় পড়া চেতনা হ্রাস করতে পারে। পুরো পোস্টটি পড়ার আগে বিরতি নিন বা ডাক্তার বা ফার্মাসিস্টকে জিজ্ঞাসা করুন।

নিয়মিত প্রকাশ কী?

একটি নিয়মিত অভিব্যক্তি হ'ল বিশেষ অক্ষরগুলির একটি সিরিজ যা আমাদের এমন একটি পাঠ্য বর্ণনা করতে দেয় যা আমরা সন্ধান করতে চাই। উদাহরণস্বরূপ, আমরা যদি "লিনাক্স" শব্দটি অনুসন্ধান করতে চাইতাম তবে আমরা যে প্রোগ্রামটি ব্যবহার করছি সে শব্দটি রাখা যথেষ্ট হবে। শব্দটি নিজেই একটি নিয়মিত অভিব্যক্তি। এখন পর্যন্ত এটি খুব সহজ বলে মনে হচ্ছে তবে আমরা যদি একটি নির্দিষ্ট ফাইলে সমস্ত সংখ্যা খুঁজে পেতে চাই তবে কী হবে? বা সমস্ত লাইন যে একটি বড় অক্ষর দিয়ে শুরু? এই ক্ষেত্রে আপনি আর একটি সহজ শব্দ রাখতে পারবেন না। সমাধানটি হ'ল নিয়মিত এক্সপ্রেশন ব্যবহার করা।

নিয়মিত এক্সপ্রেশন বনাম ফাইলের ধরণগুলি।

আমরা নিয়মিত প্রকাশে আসার আগে আমি নিয়মিত প্রকাশের বিষয়ে একটি সাধারণ ভুল বোঝাবুঝি পরিষ্কার করতে চাই। একটি নিয়মিত এক্সপ্রেশন হ'ল হার্ড ডিস্কের বিভিন্ন ফাইলকে উল্লেখ করার জন্য আমরা rm, cp ইত্যাদি কমান্ডগুলিতে প্যারামিটার হিসাবে রাখি। এটি একটি ফাইল প্যাটার্ন হবে। নিয়মিত এক্সপ্রেশন, যদিও তারা কিছু সাধারণ অক্ষর ব্যবহার করে থাকে তার মতো হলেও এটি আলাদা। হার্ড ডিস্কে থাকা ফাইলগুলির বিরুদ্ধে একটি ফাইল প্যাটার্ন নিক্ষেপ করা হয় এবং প্যাটার্নের সাথে পুরোপুরি মেলে এমনগুলি ফিরিয়ে দেয়, যখন একটি নিয়মিত এক্সপ্রেশন একটি পাঠ্যের বিপরীতে চালিত হয় এবং অনুসন্ধান করা পাঠ্য থাকা লাইনগুলি ফিরিয়ে দেয়। উদাহরণস্বরূপ, নিয়মিত প্রকাশটি প্যাটার্নের সাথে সম্পর্কিত *.* এটা কিছু হবে ^.*\..*$

নিয়মিত প্রকাশের প্রকারগুলি।

সমস্ত প্রোগ্রাম একই নিয়মিত অভিব্যক্তি ব্যবহার করে না। খুব কম না। নিয়মিত প্রকাশের বেশ কয়েকটি বা কম স্ট্যান্ডার্ড ধরণের রয়েছে, তবে এমন প্রোগ্রাম রয়েছে যা সিনট্যাক্সটি সামান্য পরিবর্তন করে, তাদের নিজস্ব এক্সটেনশানগুলি অন্তর্ভুক্ত করে, বা এমনকি সম্পূর্ণ আলাদা অক্ষর ব্যবহার করে। সুতরাং, আপনি যখন এমন কোনও প্রোগ্রামের সাথে নিয়মিত মত প্রকাশ করতে চান যা আপনি ভাল জানেন না, তখন প্রথমটি হ'ল প্রোগ্রামটির ম্যানুয়াল বা ডকুমেন্টেশনটি দেখার জন্য এটি নিয়মিত স্বীকৃতিগুলি কী রকম স্বীকৃতি দেয় তা দেখতে।

প্রথমত, দুটি প্রধান ধরণের নিয়মিত এক্সপ্রেশন রয়েছে যা পসিক্স স্ট্যান্ডার্ডের মধ্যে রয়েছে যা লিনাক্স সরঞ্জামগুলি ব্যবহার করে। এগুলি হল প্রাথমিক এবং বর্ধিত নিয়মিত অভিব্যক্তি। নিয়মিত প্রকাশের সাথে কাজ করা অনেকগুলি কমান্ড, যেমন গ্রেপ বা সেড আপনাকে এই দুটি ধরণের ব্যবহার করতে দেয়। আমি নীচে তাদের সম্পর্কে কথা বলতে হবে। এছাড়াও পিইআরএল-স্টাইলের নিয়মিত এক্সপ্রেশন রয়েছে এবং তারপরে ভিএম বা ইমাসের মতো প্রোগ্রাম রয়েছে যা এর রূপগুলি ব্যবহার করে। আমরা কী করতে চাই তার উপর নির্ভর করে এক বা অন্যটি ব্যবহার করা আরও উপযুক্ত হতে পারে।

নিয়মিত অভিব্যক্তি পরীক্ষা করা।

নিয়মিত প্রকাশের বাক্য গঠনটি তুচ্ছ কিছু নয়। যখন আমাদের একটি জটিল নিয়মিত অভিব্যক্তি লিখতে হয় আমরা প্রথম নজরে বুঝতে অসম্ভব বিশেষ অক্ষরের একটি স্ট্রিংয়ের সামনে থাকব, সুতরাং কীভাবে সেগুলি ব্যবহার করতে হয় তা শিখতে আমরা চাইলে সমস্ত পরীক্ষা করার একটি উপায় থাকা এবং ফলাফলগুলি সহজেই দেখতে পাওয়া জরুরী। সে কারণেই আমি এখন বেশ কয়েকটি কমান্ড লিখতে যাচ্ছি যার সাহায্যে আমরা নিয়মিত অভিব্যক্তিগুলির আধিপত্য বিস্তার না করা পর্যন্ত আমরা পরীক্ষাগুলি করতে এবং আমাদের প্রয়োজনীয় সমস্ত কিছু পরীক্ষা করতে পারি।

প্রথমটি হ'ল গ্রেপ কমান্ড। এটি অনুসন্ধানের জন্য আমরা প্রায়শই ব্যবহার করব command বাক্য গঠনটি নিম্নরূপ:

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

আমি সর্বদা একক উদ্ধৃতিগুলিতে নিয়মিত ভাব প্রকাশ করার পরামর্শ দিই যাতে শেলটি এটির কাছে না যায়। প্রথম উপায়টি হ'ল কোনও ফাইলে নিয়মিত প্রকাশ পাওয়া। দ্বিতীয়টি নিয়মিত অভিব্যক্তির মাধ্যমে একটি কমান্ডের আউটপুট ফিল্টার করতে দেয়। ডিফল্টরূপে, গ্রেপ বেসিক নিয়মিত এক্সপ্রেশন ব্যবহার করে। -E বিকল্পটি বর্ধিত নিয়মিত এক্সপ্রেশন ব্যবহার করার জন্য।

একটি কৌশল যা গ্রেপ কমান্ডে রঙের ব্যবহার সক্ষম করতে নিয়মিত এক্সপ্রেশনগুলি কীভাবে কাজ করে তা আমাদের দেখতে সহায়তা করে। এইভাবে, পাঠ্যটির যে অংশটি আমরা ব্যবহার করছি নিয়মিত প্রকাশের সাথে মেলে তা হাইলাইট করা হবে। গ্রেপ কমান্ডের রঙটি সক্রিয় করতে কেবল পরিবেশের পরিবর্তনশীল তা নিশ্চিত করুন 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

এবং আমরা ফলাফলটি দেখতে পাচ্ছি:

খিলানলিনাক্স: https://wiki.archlinux.org/ খিলান লিনাক্স: 11-03-2002 থেকে লিনাক্স রুলেজ

এগুলি তিনটি লাইন যা "লিনাক্স" শব্দটি ধারণ করে, যদি আমরা রঙের কৌশলটি ব্যবহার করি তবে তা হাইলাইট হবে। মনে রাখবেন যে এটি "আর্চলিনাক্স" এর মতো লম্বা শব্দের অংশ হলেও আমরা যে শব্দটির সন্ধান করছি তা এটি সনাক্ত করে। তবে এটি "লিনাক্স" শব্দটি হাইলাইট করে না যা URL "https://wiki.archlinux.org/" এ প্রদর্শিত হবে। কারণ এটি ছোট হাতের "এল" এর সাথে সেখানে উপস্থিত হয়েছে এবং আমরা এটি বড় হাতের মধ্যে খুঁজে পেয়েছি। গ্রেপ কমান্ডের এর জন্য বিকল্প রয়েছে, তবে আমি নিয়মিত প্রকাশের সাথে সম্পর্কিত একটি নিবন্ধে তাদের সম্পর্কে কথা বলতে যাচ্ছি না।

এই সাধারণ পরীক্ষা দিয়ে আমরা প্রথম উপসংহারটি আঁকতে পারি:

  • একটি নিয়মিত ভাব প্রকাশের মধ্যে রাখা একটি সাধারণ চরিত্র নিজের সাথে মেলে।

যার অর্থ হ'ল আপনি "a" অক্ষরটি রাখলে এটি "a" অক্ষরটি খুঁজে পেতে পারে। এটা যৌক্তিক মনে হচ্ছে, তাই না? 🙂

এখন ধরুন আমরা "সেন্টো" শব্দটি কোনও অক্ষর অনুসারে অনুসন্ধান করতে চাই, তবে কেবল একটি একক অক্ষর। এর জন্য আমরা "" "অক্ষরটি ব্যবহার করতে পারি, যা কোনও ওয়াইল্ডকার্ড যা কোনও চরিত্রের সাথে মেলে তবে একটি মাত্র:

grep 'CentO.' regex

এবং ফলাফল:

সেন্টওএস: http://wiki.centos.org/
সেন্টো: 14-05-2004 03:32:38

যার অর্থ এটি এর মধ্যে "সেন্টস" এর "এস" অন্তর্ভুক্ত রয়েছে যদিও এক ক্ষেত্রে এটি বড় হাতের এবং অন্য একটি ছোট হাতের অক্ষরে। যদি অন্য কোনও চরিত্রটি সেই জায়গায় হাজির হয় তবে এটিতে এটিও অন্তর্ভুক্ত থাকবে। আমাদের ইতিমধ্যে দ্বিতীয় নিয়ম রয়েছে:

  • চরিত্র "." যে কোনও চরিত্রের সাথে মেলে।

এটি যতটা তুচ্ছ ততটা তুচ্ছ মনে হচ্ছে না তবে এটি দিয়ে আমরা বেশি কিছু করতে পারি না। আরও কিছুদূর যাওয়া যাক। ধরা যাক আমরা ২০০২ এবং ২০০৪ সালে যে রেখাগুলি প্রদর্শিত হয়েছিল সেগুলি সন্ধান করতে চাই They এগুলি দুটি অনুসন্ধানের মতো মনে হলেও এগুলি একবারে করা যেতে পারে:

grep '200[24]' regex

যার অর্থ হ'ল আমরা 200 বা 2 এর পরে 4 সংখ্যাটি খুঁজতে চাই এবং ফলাফলটি এটি:

আর্ক লিনাক্স: 11-03-2002
জেন্টু: 31/03 /2002
সেন্টোস: 14-05-2004 03:32:38
Ubuntu: 20/10/2004

যা আমাদের তৃতীয় নিয়মে নিয়ে আসে:

  • বন্ধনীতে আবদ্ধ একাধিক অক্ষর বন্ধনীগুলির মধ্যে যে কোনও অক্ষরের সাথে মেলে।

বন্ধনী আরও খেলা দেয়। এগুলি অক্ষর বাদ দেওয়ার জন্যও ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, ধরুন আমরা এমন সাইটগুলি সন্ধান করতে চাই যেখানে ":" অক্ষরটি উপস্থিত হয় তবে "/" দ্বারা অনুসরণ করা হয় না। আদেশটি এরকম হবে:

grep ':[^/]' regex

এটি কেবল বন্ধুর ভিতরে প্রথম অক্ষর হিসাবে "putting" রাখার বিষয়। আপনি চান সমস্ত অক্ষর নীচে রাখতে পারেন। এই শেষ আদেশের ফলাফল নিম্নলিখিত:

আর্কলিনাক্স: 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 উবুন্টু: 20/10/2004

এখন ডিস্ট্রো নামের পিছনে ":" হাইলাইট করা হয়েছে তবে ইউআরএলগুলির মধ্যে সেগুলি নয় কারণ ইউআরএলগুলির পরে "/" রয়েছে।

  • বন্ধনীটির শুরুতে "^" অক্ষরটি ব্র্যাককেটের অন্যান্য অক্ষর ব্যতীত অন্য কোনও অক্ষরের সাথে মেলে।

আর একটি জিনিস যা আমরা করতে পারি তা হ'ল অক্ষরের ব্যাপ্তি নির্দিষ্ট করা। উদাহরণস্বরূপ, "-" এর পরে যে কোনও সংখ্যার সন্ধান করা এটি দেখতে এই জাতীয় দেখাচ্ছে:

grep '[0-9]-' regex

এটির সাহায্যে আমরা 0 এবং 9 এর মধ্যে একটি অক্ষর এবং তারপরে একটি বিয়োগ চিহ্নটি নির্দিষ্ট করছি। এর ফলাফল দেখুন:

আর্ক লিনাক্স: ১1-03-2002 সেন্টো: 14-05-2004: 03: 32: 38

একক অক্ষরের সাথে এমনকি রেঞ্জগুলি মেশাতে ব্র্যাকেটের মধ্যে একাধিক ব্যাপ্তি নির্দিষ্ট করা যেতে পারে।

  • বন্ধনীগুলির মধ্যে "-" দ্বারা পৃথকীকৃত দুটি অক্ষর স্থাপন করা সীমার মধ্যে যে কোনও অক্ষরের সাথে মেলে।

আমরা এখন URL এর প্রথম অংশটি নির্বাচন করতে পারি কিনা তা এখন দেখুন। যেটি "HTTP" বা "https" বলে। তারা কেবল চূড়ান্ত "গুলি" এর মধ্যে পৃথক, সুতরাং আসুন এটি নিম্নলিখিত হিসাবে করা যাক:

grep -E 'https?' regex

চরিত্রটিকে তার বাম optionচ্ছিক করতে প্রশ্ন চিহ্নটি ব্যবহৃত হয়। কিন্তু এখন আমরা কমান্ড -E বিকল্প যুক্ত করেছি। কারণ জিজ্ঞাসাবাদ বর্ধিত নিয়মিত প্রকাশের একটি বৈশিষ্ট্য। এখনও অবধি আমরা বেসিক নিয়মিত এক্সপ্রেশন ব্যবহার করছিলাম, সুতরাং আমাদের কিছু দেওয়ার দরকার পড়েনি didn't এর ফলাফল দেখুন:

আর্কলিনাক্স: 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/
উবুন্টু: https://wiki.ubuntu.com/
ডেবিয়ান: 16 / 08 / 1993
উবুন্টু: 20 / 10 / 2004
  • চরিত্র «|» বেশ কয়েকটি নিয়মিত অভিব্যক্তি এবং সেগুলির সাথে কোনওটির সাথে পৃথক করে। এটি বর্ধিত নিয়মিত প্রকাশের জন্যও নির্দিষ্ট specific

চল অবিরত রাখি. এখন আমরা "লিনাক্স" শব্দটির সন্ধান করতে যাচ্ছি, তবে কেবল যেখানে এটি বাম দিকে অন্য শব্দের সাথে আটকে নেই। আমরা এটি এর মতো করতে পারি:

grep '\

এখানে গুরুত্বপূর্ণ চরিত্রটি "<", তবে এর সামনে "\" রেখে এড়াতে হবে যাতে গ্রেপ এটি একটি বিশেষ চরিত্র হিসাবে ব্যাখ্যা করবে। নিম্নরূপ ফলাফল:

খিলান লিনাক্স: 11-03-2002 থেকে লিনাক্স রুলেজ

একে অপরের ঠিক মতো নয় এমন শব্দগুলির জন্য আপনি অনুসন্ধান করতে "\> "ও ব্যবহার করতে পারেন। একটি উদাহরণ দিয়ে যাই। আসুন এই আদেশটি চেষ্টা করুন:

grep 'http\>' regex

আউটপুট এটি উত্পাদন করে:

সেন্টওএস: HTTP: //wiki.centos.org/

"এইচটিটিপি" বেরিয়ে এসেছে তবে "https" নয়, কারণ "https" তে এখনও "পি" এর ডানদিকে একটি অক্ষর রয়েছে যা কোনও শব্দের অংশ হতে পারে।

  • "<" এবং ">" অক্ষর যথাক্রমে শব্দের শুরু এবং শেষের সাথে মেলে। এই অক্ষরগুলি অবশ্যই পালাতে হবে যাতে এগুলি আক্ষরিক চরিত্র হিসাবে ব্যাখ্যা না হয়।

আমরা কিছু বেশি জটিল জিনিস নিয়ে যাই। "+" অক্ষরটি তার বামে চরিত্রের সাথে মেলে, কমপক্ষে একবার পুনরাবৃত্তি হয়েছিল। এই চরিত্রটি কেবল বর্ধিত নিয়মিত প্রকাশের সাথে উপলভ্য। এটির সাহায্যে আমরা অনুসন্ধান করতে পারি, উদাহরণস্বরূপ, ":" দিয়ে শুরু হওয়া একাধিক সংখ্যার ক্রম।

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

ফলাফল:

CentOs: 14-05-2004 03: 32: 38

38 নম্বরটিও হাইলাইট করা হয়েছে কারণ এটি ":" দিয়ে শুরু হয়।

  • "+" অক্ষরটি তার বামে চরিত্রের সাথে মেলে, কমপক্ষে একবারে পুনরাবৃত্তি হয়।

আপনি "{" এবং "}" ব্যবহার করে পুনরাবৃত্তির সংখ্যাও নিয়ন্ত্রণ করতে পারেন। ধারণাটি হ'ল ধনুর্বন্ধনীগুলিতে এমন একটি সংখ্যা রাখা যা আমরা চাইবার পুনরাবৃত্তির সঠিক সংখ্যা নির্দেশ করে। আপনি একটি পরিসীমাও রাখতে পারেন। আসুন দুটি মামলার উদাহরণ দেখুন।

প্রথমে আমরা চারটি-অঙ্কের ক্রমগুলি খুঁজতে যাচ্ছি:

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

নোট করুন যে কোঁকড়া ধনুর্বন্ধনীগুলি অবশ্যই পালাতে হবে যদি আমরা বেসিক নিয়মিত অভিব্যক্তি ব্যবহার করি তবে তা নয় যে আমরা প্রসারিতগুলি ব্যবহার করি। বর্ধিত সঙ্গে এটি হবে:

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

এবং উভয় ক্ষেত্রেই ফলাফলটি হবে:

আর্ক লিনাক্স: 11-03-2002
জেন্টু: 31/03 /2002
সেন্টোস: 14-05-2004 03:32:38
Debian: 16/08/1993
উবুন্টু: 20/10 /2004
  • "{" এবং "}" অক্ষরগুলির মধ্যে একটি সংখ্যার সাথে পূর্ববর্তী অক্ষরটির সাথে মিলিত হয় নির্দিষ্ট সময়ের বার বার repeated

ধনুর্বন্ধনী সঙ্গে এখন অন্য উদাহরণ। মনে করুন আমরা 3 থেকে 6 টি ছোট হাতের অক্ষরযুক্ত শব্দগুলি খুঁজতে চাই। আমরা নিম্নলিখিতগুলি করতে পারি:

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

এবং ফলাফল এটি হবে:

- এলঈষ্ট de পৃষ্ঠাs উইকি: প্রতিRCHLইনক্স: HTTPS দ্বারা: //উইকি.archlinux.সংস্থা/ জিপ্রবেশ: HTTPS দ্বারা: //উইকি.মৃদু.সংস্থা/উইকি/MAin_Pবয়স
CENTঅপারেটিং সিস্টেম: HTTP: //উইকি.শত শত.সংস্থা/ ডিইবিয়ান: HTTPS দ্বারা: //উইকি.ডেবিয়ান.সংস্থা/ বাবুন্টু: HTTPS দ্বারা: //উইকি.উবুন্টু.com যুক্ত করুন/ - এফতুমি মিস কর de মুক্তি: প্রতিRCH Lইনক্স: 11-03-2002 জিপ্রবেশ: 31/03/2002 গENTOs: 14-05-2004 03:32:38
Dইবিয়ান: 16/08/1993 ইউবুন্টু: 20/10/2004 ডিএটাই Lইনক্স Rউলেজ.

যা আপনি দেখতে পাচ্ছেন, আমরা যা চেয়েছিলাম তেমন দেখাচ্ছে না। এর কারণ নিয়মিত প্রকাশটি লম্বা হওয়া অন্য শব্দের মধ্যে বর্ণগুলি খুঁজে পায় finds আসুন এই অন্যান্য সংস্করণ চেষ্টা করুন:

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

ফলাফল:

- পৃষ্ঠাগুলির তালিকা উইকি: আর্চলিনাক্স: HTTPS দ্বারা: //উইকি.archlinux।সংস্থা/ জেন্টো: HTTPS দ্বারা: //উইকি.মৃদু.সংস্থা/উইকি/ মেইনপেজ সেন্টোস: HTTP: //উইকি.শত শত.সংস্থা/ ডেবিয়ান: HTTPS দ্বারা: //উইকি.ডেবিয়ান.সংস্থা/ উবুন্টু: HTTPS দ্বারা: //উইকি.উবুন্টু.com যুক্ত করুন/

এটি ইতিমধ্যে আমরা যা চেয়েছিলাম তার মতো আরও বেশি দেখাচ্ছে। আমরা যা করেছি তা হ'ল শব্দটির প্রথম অক্ষরের ঠিক আগে শুরু হওয়া এবং শেষের পরে শেষ হওয়া দরকার।

  • "{" এবং "}" অক্ষরগুলির মধ্যে দুটি সংখ্যার সাথে একটি কমা দ্বারা পৃথক করা পূর্বের অক্ষরটি দুটি সংখ্যার দ্বারা নির্দেশিত সময়ের সংখ্যাটির পুনরাবৃত্তি করে।

আসুন এখন এমন একটি চরিত্রটি দেখুন যা "+" এর প্রধান। এটি "*" এবং এর ক্রিয়াকলাপটি কেবলমাত্র এটির সাথে একই রকম যে এটি শূন্য সহ যে কোনও সংখ্যক অক্ষরের সাথে মেলে। এটি, এটি "+" হিসাবে একই কাজ করে তবে পাঠ্যটিতে উপস্থিত হতে বাম দিকের অক্ষরের প্রয়োজন হয় না। উদাহরণস্বরূপ, আসুন উইকিতে শুরু হওয়া এবং org এ শেষ হওয়া সেই ঠিকানাগুলি সন্ধান করার চেষ্টা করি:

grep 'wiki.*org' regex

এর ফলাফল দেখুন:

আর্কলিনাক্স: https: //wiki.archlinux.org/ জেন্টো: https: //wiki.gentoo.org/ উইকি / মেইনপেজ সেন্টোস: http: //wiki.centos.org/ ডেবিয়ান: https: //wiki.debian.org/

Perfecto থেকে।

এখন আমরা শেষ চরিত্রটি দেখতে যাচ্ছি। "\" চরিত্রটি ডানদিকে অক্ষরটি পালাতে ব্যবহৃত হয় যাতে এটি এর বিশেষ অর্থ হারিয়ে ফেলে। উদাহরণস্বরূপ: ধরুন আমরা একটি বিন্দুতে শেষ হওয়া লাইনগুলি সনাক্ত করতে চাই। আমাদের মধ্যে প্রথম যে বিষয়টি ঘটতে পারে তা হ'ল:

grep '.$' regex

ফলাফলটি আমরা যা খুঁজছি তা নয়:

- উইকি পৃষ্ঠাগুলির তালিকা:
আর্চলিনাক্স: https://wiki.archlinux.org/
জেন্টু: https://wiki.gentoo.org/wiki/Main_Page
CentOS: http://wiki.centos.org/
ডেবিয়ান: https://wiki.debian.org/
উবুন্টু: https://wiki.ubuntu.com/
- প্রকাশের তারিখ: আর্চ লিনাক্স: 11-03-2002
জেন্টো: 31/03/2002
CentOs: 14-05-2004 03:32:38
দেবিয়ান: 16/08/1993
উবুন্টু: 20/10/2004
Desde Linux রুলেজ.

এটি কারণ "।" কোনও কিছুর সাথে মেলে, যাতে নিয়মিত প্রকাশটি প্রতিটি লাইনের শেষ চরিত্রের সাথে যা হয় তা মেলে। সমাধানটি হ'ল:

grep '\.$' regex

এখন ফলাফল আমরা যা চাই:

Desde Linux রুলেজ.

খেলা শেষ

যদিও নিয়মিত প্রকাশের বিষয়টি এত জটিল যে আমি ধারাবাহিক নিবন্ধের জন্য দেব, আমি মনে করি আমি ইতিমধ্যে আপনাকে যথেষ্ট ব্যথা দিয়েছি। আপনি যদি পৌঁছতে সক্ষম হন তবে অভিনন্দন। এবং আপনি যদি একবারে এই সমস্ত কিছু পড়ে থাকেন তবে একটি অ্যাসপিরিন বা অন্য কিছু নিন, কারণ এটি ভাল হতে পারে না।

আপাতত এটাই সব। আপনি যদি এই নিবন্ধটি পছন্দ করেন, তবে আপনি অন্য একটি লিখতে পারেন। এর মধ্যে, আমি আপনাকে পরামর্শ দিচ্ছি যে তারা কীভাবে কাজ করে তা স্পষ্ট দেখতে টার্মিনালের সমস্ত নিয়মিত প্রকাশের চেষ্টা করুন। এবং মনে রাখবেন: কেবল চক নরিস নিয়মিত এক্সপ্রেশন ব্যবহার করে এইচটিএমএলকে পার্স করতে পারে।


আপনার মন্তব্য দিন

আপনার ইমেল ঠিকানা প্রকাশিত হবে না। প্রয়োজনীয় ক্ষেত্রগুলি দিয়ে চিহ্নিত করা *

*

*

  1. ডেটার জন্য দায়বদ্ধ: মিগুয়েল অ্যাঞ্জেল গাটান
  2. ডেটার উদ্দেশ্য: নিয়ন্ত্রণ স্প্যাম, মন্তব্য পরিচালনা।
  3. আইনীকরণ: আপনার সম্মতি
  4. তথ্য যোগাযোগ: ডেটা আইনি বাধ্যবাধকতা ব্যতীত তৃতীয় পক্ষের কাছে জানানো হবে না।
  5. ডেটা স্টোরেজ: ওসেন্টাস নেটওয়ার্কস (ইইউ) দ্বারা হোস্ট করা ডেটাবেস
  6. অধিকার: যে কোনও সময় আপনি আপনার তথ্য সীমাবদ্ধ করতে, পুনরুদ্ধার করতে এবং মুছতে পারেন।

  1.   এজেকুয়েল তিনি বলেন

    রেগেক্স ছাড়া আমাদের জীবন কী হত?
    নিবন্ধটি খুব দরকারী, তবে আমি এটি অল্প অল্প করে পড়ব। অনেক ধন্যবাদ.

    1.    হেক্সবার্গ তিনি বলেন

      মন্তব্যের জন্য আপনাকে ধন্যবাদ। আমি এখনও বিশ্বাস করি না যে আমার নিবন্ধটি প্রকাশিত হয়েছে। Some এটি কিছু ত্রুটি সহ প্রকাশ পেয়েছে তবে আমি আশা করি এটি কার্যকর is 🙂

  2.   স্কালিবুর তিনি বলেন

    ধন্যবাদ ইউএসএসএসএসস ..!

    কিছু সময় আগে আমাকে নিয়মিত প্রকাশের বিষয়ে কিছুটা অধ্যয়ন করতে হয়েছিল .. .. আমি শিক্ষার জন্য আপনাকে ধন্যবাদ জানাই .. এবং তাদের প্রত্যেকটি শেখার জন্য ধাপে ধাপে গাইড ..

    খুব ভাল! .. .. আমি সেই অ্যাসপিরিন পেতে চলেছি .. ই

    1.    হেক্সবার্গ তিনি বলেন

      আপনাকে স্বাগতম. সাহস এবং নিয়মিত প্রকাশগুলি আপনার সাথে থাকতে পারে না। 🙂

  3.   টানরেক্স তিনি বলেন

    চমত্কার পোস্ট! দারূন কাজ. আমি অবাক হই যে এটি আপনাকে কত ঘন্টা নিয়েছে 😀

    1.    হেক্সবার্গ তিনি বলেন

      হাঃ হাঃ হাঃ!! প্রশ্নটি হল: আমি বলার উদ্দেশ্যে যা কিছু বলেছিলাম তা যদি আমার কত ঘন্টা হত? অসীম !! 🙂

  4.   তম্মুজ তিনি বলেন

    একটি জিনিস আমি জানতাম না, ভাল নিবন্ধ!

    1.    হেক্সবার্গ তিনি বলেন

      ধন্যবাদ. এটি আপনার সাথে ভাগ করে নিতে পেরে আনন্দিত।

  5.   হেলেনা_রিউ তিনি বলেন

    দুর্দান্ত ব্যাখ্যা। অভিনন্দন! সত্যিই দরকারী!

    1.    হেক্সবার্গ তিনি বলেন

      আপনি এটি দরকারী বলে খুশি। সুতরাং এটি লিখতে একটি আনন্দের হয়।

  6.   বিরোধী তিনি বলেন

    এটি বিশেষ কোথাও যেতে হবে। বৈশিষ্ট্যযুক্ত মত তবে একটি খুব নির্দিষ্ট দরকারী আছে। বেশ কার্যকর, যদিও আমি এটি ভিমে প্রয়োগ করে দেখতে চাই।

    1.    হেক্সবার্গ তিনি বলেন

      এটি নিজেকে জিজ্ঞাসা করার একটি প্রশ্ন। আমার মনে নিয়মিত প্রকাশের উপর আরও কয়েকটি নিবন্ধ রয়েছে। এবং আমি তাদের মধ্যে vim সম্পর্কে কথা বলতে পারে। আমি এই নিবন্ধে যা বলেছি তার থেকে কিছু পার্থক্য রয়েছে। এটি সাথে চালিয়ে যাওয়া বিষয়। 🙂

  7.   ফার্নান্দো তিনি বলেন

    ভাল!

    Muy bueno tu artículo, es curioso, recientemente (ahora mismo) he publicado en mi web una entrada que llevaba preparando desde hace unos días donde he recogido una lista de metacaracteres para las expresiones regulares y algunos ejemplos. ¡Y ha sido justo entrar en DesdeLinux y ver una entrada sobre la misma temática!

    যদি এটি কোনও সান্ত্বনা থাকে তবে আমার অনেক বেশি প্যাসি 😀

    অবশ্যই রেজেক্স সবচেয়ে দরকারী জিনিসগুলির মধ্যে একটি, আমি সাধারণত এগুলি কমান্ডগুলির আউটপুটটি ছাঁটাই করতে এবং আমার আগ্রহী অংশটি রাখার জন্য ব্যবহার করি এবং উদাহরণস্বরূপ বাশ স্ক্রিপ্টে এটির সাথে ইন্টারঅ্যাক্ট করি। আমি তাদের বিশ্ববিদ্যালয়েও প্রচুর ব্যবহার করেছি, এবং সংকলক নির্মাণে (লিক্সোগ্রাফিক এবং পার্সার সংজ্ঞায়) এগুলি অত্যন্ত গুরুত্বপূর্ণ। সংক্ষেপে, একটি পুরো বিশ্ব।

    শুভেচ্ছা এবং খুব খুব ভাল কাজ।

    1.    হেক্সবার্গ তিনি বলেন

      আপনাকে অনেক ধন্যবাদ।

      আমি আপনার নিবন্ধটি পছন্দ করেছেন। এটা আমার চেয়ে আরও সংক্ষিপ্ত। এটি একটি দ্রুত রেফারেন্স হিসাবে পরিবেশন করতে পারে। এটি একটি কাকতালীয় বিষয় যে আমরা এটি একই সাথে লিখেছি। আপনি দেখতে পাচ্ছেন যে লোকেরা বিষয়টিতে আগ্রহী। 🙂

  8.   এলারি তিনি বলেন

    ডামি =) এর জন্য নিয়মিত এক্সপ্রেশন, এখন গ্রাপের জন্য রঙের সাথে আউটপুট আনার জন্য আমার পক্ষে আরও স্পষ্ট। বাশার্ক ওরফে গ্রেপ = 'গ্রেপ olcolor = সর্বদা' ক্ষেত্রে একটি উপকরণ তৈরি করা case এটি কারও পক্ষে কাজ করে।

    শুভেচ্ছা

    1.    হেক্সবার্গ তিনি বলেন

      সত্য। এটি এটি করার আরেকটি উপায়। ইনপুট জন্য ধন্যবাদ। 🙂

  9.   কেজেডিজি ^ গারা তিনি বলেন

    ও_ও… অবদানের অংশ !!! ও_ও ...
    পোস্টটির জন্য আপনাকে অনেক ধন্যবাদ, আমি কিছুক্ষণের জন্য অপেক্ষা করছিলাম হাহাহাহা, আমি ইতিমধ্যে একে একে ঘৃণিত করতে শূন্য ঝামেলা সহ বাড়িতে শান্তভাবে পড়তে উন্মুক্ত রেখেছি।

    নিবন্ধটির জন্য ধন্যবাদ, আমি সত্যিই করি 😀

    1.    হেক্সবার্গ তিনি বলেন

      আমি জানতাম আপনি এটি পছন্দ করবেন। হাঃ হাঃ হাঃ!! সত্যটি হ'ল অনেক কিছুই নিখোঁজ, তবে ইতিমধ্যে আমার মনে একটি দ্বিতীয় অংশ রয়েছে। 🙂

  10.   এলিয়াসার ট্যাটেস তিনি বলেন

    দুর্দান্ত নিবন্ধ, আমি যদি গতকাল এটি পড়তে পারি, তবে আমি আজ যে ক্লাসটি দিয়েছি তা আমার শিক্ষার্থীদের পক্ষে আরও সহজ হতে পারে!

    1.    হেক্সবার্গ তিনি বলেন

      হাঃ হাঃ হাঃ!! খুব খারাপ আমি দেরি করে ফেলেছি, তবে আনন্দিত এটি সহায়ক। 🙂

  11.   লিওটোরো তিনি বলেন

    অবশেষে !!!, অতি ভাল পোস্ট…। আমি অবশেষে এমন কিছু পেয়েছি যা স্পষ্টভাবে নিয়মিত অভিব্যক্তি ব্যাখ্যা করে… ..

    1.    হেক্সবার্গ তিনি বলেন

      সেখানে প্রচুর তথ্য রয়েছে তবে সহজে বোঝা যায় এমন কিছু খুঁজে পাওয়া আরও বেশি কঠিন। আমি খুশি যে আমি এই শূন্যস্থানটি পূরণ করেছি 🙂

      গ্রিটিংস।

  12.   শেক্সপিয়ার রোডস তিনি বলেন

    আরে আমার সহায়তা দরকার, আমাকে ফর্ম্যাটটি দিয়ে / var / লগগুলি অনুসন্ধান করতে হবে: yymmdd, এবং লগগুলি 130901.log -130901.log এর মতো আসে, আমাকে সেপ্টেম্বরের 1 থেকে 11 অক্টোবরের মধ্যে সমস্তগুলি অনুসন্ধান করতে হবে , কেবলমাত্র আমি পরিচালনা করতে পেরেছি সেপ্টেম্বর মাসের সমস্ত অপসারণ কিন্তু আমি কীভাবে সম্পূর্ণ চেইনটি করব তা জানি না:

    উদাহরণস্বরূপ: ১৩০৯ [০-৩] আমাকে সেপ্টেম্বর 1309 থেকে 0 সেপ্টেম্বরের মধ্যে লগগুলি ফিরিয়ে দেয় তবে 3 থেকে 1 অক্টোবর পর্যন্ত একই চেইনে কীভাবে নামতে হয় তা আমি জানি না।

    1.    হেক্সবার্গ তিনি বলেন

      নিয়মিত এক্সপ্রেশন ব্যবহার করে এটি করা কিছুটা জটিল। আমার কাছে এটি ঘটে যে এর মতো কিছু কাজ করতে পারে:

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

      এটি একটি বর্ধিত নিয়মিত অভিব্যক্তি। আপনি কোন সরঞ্জামটি ব্যবহার করছেন তা আপনি বলবেন না, তাই আমি আপনাকে আরও বিশদ দিতে পারি না।

      যাইহোক, আমি মনে করি নিয়মিত এক্সপ্রেশন ব্যবহার না করে এটি সন্ধানের সাথে এটি করা ভাল। আপনি এরকম কিছু চেষ্টা করতে পারেন:

      অনুসন্ধান. -নিমার্ট '01 সেপ '-এ! -নেওয়ার্ম্ট '11 অক্ট '-প্রিন্ট

      ভাগ্য। আশা করি এটি আপনাকে সহায়তা করতে পারে।

  13.   চিপো তিনি বলেন

    হ্যালো! প্রথমত, আমি আপনাকে আপনার কাজের জন্য ধন্যবাদ জানাতে চাইছি কারণ এই পৃষ্ঠাটি আমার সেরা লিনাক্স সাইটগুলির মধ্যে "শীর্ষ 3" এর মধ্যে রয়েছে।
    আমি অনুশীলন করছিলাম এবং আমি জানতাম না কেন কোনও ফোন নম্বরে একটি রেজিএক্সপ্যাক আমার পক্ষে কাজ করে না এবং এটি হ'ল আমি "-E" মিস করছি (যা আমি এই পোস্টটির জন্য উপলব্ধি করেছি)।
    আমি আপনাকে জিজ্ঞাসা করতে চেয়েছিলাম যে আপনি কোনও ভাল পিডিএফ বা সাইট জানেন না যেখানে রেজিপ্স্পে অনুশীলন রয়েছে, যদিও সামান্য কল্পনা দিয়ে আপনি নিজে আবিষ্কারের অনুশীলন করতে পারেন।

    শুভেচ্ছা, পাবলো।

  14.   ক্লে তিনি বলেন

    খুব ভাল, আমি কেবল এটি সব পড়েছি এবং হ্যাঁ এখন আমার একটি অ্যাসপিরিন দরকার 🙂

  15.   অস্কার তিনি বলেন

    আমি নিয়মিত প্রকাশ প্রকাশের সেরা ব্যাখ্যা। এই কাজ ভাগ করে নেওয়ার জন্য লেখককে আমার ধন্যবাদ।

    একটি অভিবাদন।

  16.   আলেক্সিডার তিনি বলেন

    আমি সত্যিই খুব ভাল ব্যাখ্যা পছন্দ করেছি