রেগুলার এক্সপ্রেশন সহ grep (এবং egrep) ব্যবহার করা

Using Grep With Regular Expressions



এই টিউটোরিয়ালটি কীভাবে ব্যবহার করতে হয় তা বর্ণনা করে খপ্পর (এবং egrep) টি o ফাইলগুলিতে, তাদের সহজ আকারে এবং নিয়মিত অভিব্যক্তির সাথে মিলিত হলে পাঠ্য সন্ধান করুন। এটি বেশ কয়েকটি ধারণ করে উদাহরণ এবং অনুশীলন , আরো সমাধান , দর্শকদের সম্পূর্ণ করার জন্য।

নাম খপ্পর ed (এবং vim) কমান্ড g/re/p থেকে আসে, যার অর্থ বিশ্বব্যাপী প্রদত্ত রেগুলার এক্সপ্রেশন এবং প্রিন্ট (ডিসপ্লে) আউটপুট অনুসন্ধান করা।







নিয়মিত অভিব্যক্তি

ইউটিলিটি ব্যবহারকারীকে রেগুলার এক্সপ্রেশনের সাথে মেলে এমন লাইনগুলির জন্য টেক্সট ফাইল অনুসন্ধান করার অনুমতি দেয় ( regexp )। একটি নিয়মিত অভিব্যক্তি হল একটি সার্চ স্ট্রিং যা পাঠ্য এবং এক বা একাধিক 11 টি বিশেষ অক্ষরের সমন্বয়ে গঠিত। একটি সরল উদাহরণ একটি লাইনের শুরুতে মিলছে।



নমুনা ফাইল

এর মৌলিক রূপ খপ্পর একটি নির্দিষ্ট ফাইল বা ফাইলের মধ্যে সাধারণ পাঠ্য খুঁজে পেতে ব্যবহার করা যেতে পারে। উদাহরণ চেষ্টা করার জন্য, প্রথমে নমুনা ফাইল তৈরি করুন।



নীচের পাঠ্যটি একটি ফাইলে অনুলিপি করতে ন্যানো বা ভিমের মতো একটি সম্পাদক ব্যবহার করুন আমার কাগজপত্র





xyz
xyzde
exyzd
ডেক্সিজ
d? gxyz
xxz
xzz
x z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

যদিও আপনি টেক্সটে উদাহরণ কপি এবং পেস্ট করতে পারেন (মনে রাখবেন যে ডাবল কোটগুলি সঠিকভাবে কপি নাও হতে পারে), সেগুলি সঠিকভাবে শিখতে কমান্ডগুলি টাইপ করা প্রয়োজন।

উদাহরণ চেষ্টা করার আগে, নমুনা ফাইল দেখুন:



$বিড়ালআমার কাগজপত্র

সহজ অনুসন্ধান

ফাইলের মধ্যে 'xyz' পাঠ্যটি খুঁজে পেতে নিম্নলিখিতটি চালান:

$খপ্পরxyz myfile

রং ব্যবহার করে

রং প্রদর্শন করতে, usecolor (একটি ডাবল হাইফেন) ব্যবহার করুন অথবা কেবল একটি উপনাম তৈরি করুন। উদাহরণ স্বরূপ:

$খপ্পর -রঙxyz myfile

অথবা

$উপনাম খপ্পর= 'খপ্পর-রঙ '
$খপ্পরxyz myfile

বিকল্প

সঙ্গে ব্যবহৃত সাধারণ বিকল্প খপ্পর কমান্ড অন্তর্ভুক্ত:

  • -আমি সব লাইন খুঁজে নির্বিশেষে ক্ষেত্রে
  • -সি গণনা কত লাইনে লেখা আছে
  • -এন ডিসপ্লে লাইন সংখ্যা মিলে যাওয়া লাইনগুলির
  • -শুধুমাত্র ডিসপ্লে ফাইল নাম যে ম্যাচ
  • -আর পুনরাবৃত্তি উপ-ডিরেক্টরি অনুসন্ধান
  • -v সব লাইন খুঁজে না পাঠ্য ধারণ করে

উদাহরণ স্বরূপ:

$খপ্পর -আইxyz myfile# কেস নির্বিশেষে টেক্সট খুঁজুন

$খপ্পর -আইসিxyz myfile# পাঠ্য সহ লাইন গণনা

$খপ্পর -ভিতরেxyz myfile# লাইন নম্বর দেখান

একাধিক ফাইল তৈরি করুন

একাধিক ফাইল অনুসন্ধান করার আগে, প্রথমে বেশ কয়েকটি নতুন ফাইল তৈরি করুন:

$বের করে দিলxyz>myfile1
$বের করে দিল -এবংxyz nxzz nXYZ>myfile2
$বের করে দিল -এবংxxx nyyy>myfile3
$বিড়ালmyfile1
$বিড়ালmyfile2
$বিড়ালmyfile3

একাধিক ফাইল অনুসন্ধান করুন

ফাইলের নাম বা ওয়াইল্ডকার্ড ব্যবহার করে একাধিক ফাইল অনুসন্ধান করতে প্রবেশ করুন:

$খপ্পর -আইসিxyz myfile myfile1 myfile2 myfile3
$খপ্পর -ভিতরেxyz আমার*
# 'আমার' দিয়ে শুরু হওয়া ফাইলের নাম

ব্যায়াম I

  1. প্রথমে /etc /passwd ফাইলে কত লাইন আছে তা গণনা করুন।
ইঙ্গিত: ব্যবহারwc -দ্য /ইত্যাদি/passwd
  1. এখন পাঠ্যের সমস্ত ঘটনা খুঁজুন কোথায় ফাইলে /etc /passwd
  2. ফাইলটিতে কতগুলি লাইন রয়েছে তা সন্ধান করুন
  3. কয়টি লাইনে লেখা নেই তা খুঁজুন কোথায়
  4. এ আপনার লগইন এর জন্য এন্ট্রি খুঁজুন /etc/passwd

অনুশীলনের সমাধান এই নিবন্ধের শেষে পাওয়া যাবে।

রেগুলার এক্সপ্রেশন ব্যবহার করে

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

উপলব্ধ বিশেষ অক্ষর অন্তর্ভুক্ত:

^ একটি লাইনের শুরু
$ একটি লাইনের শেষ
যেকোনো চরিত্র (new n নিউ লাইন বাদে)
* 0 বা তার আগের এক্সপ্রেশন
একটি প্রতীকের পূর্বে এটি একটি আক্ষরিক চরিত্র করে তোলে

মনে রাখবেন যে, *, যা কমান্ড লাইনে ব্যবহার করা যেতে পারে যে কোনটি সহ যেকোনো অক্ষরের সাথে মেলে না এখানে একই ভাবে ব্যবহার করা হয়েছে।

নিম্নলিখিত উদাহরণগুলিতে উদ্ধৃতি ব্যবহার লক্ষ্য করুন।

উদাহরণ

^ অক্ষর ব্যবহার করে পাঠ্য দিয়ে শুরু হওয়া সমস্ত লাইন খুঁজে পেতে:

$খপ্পর'^Xyz' myfile

$ অক্ষর ব্যবহার করে পাঠ্যের সাথে শেষ হওয়া সমস্ত লাইন খুঁজে পেতে:

$খপ্পর'Xyz $' myfile

String এবং $ উভয় অক্ষর ব্যবহার করে একটি স্ট্রিং ধারণকারী লাইন খুঁজে পেতে:

$খপ্পর'^Xyz $' myfile

ব্যবহার করে লাইন খুঁজে পেতে যে কোন চরিত্রের সাথে মেলে:

$খপ্পর'^X.z' myfile

পূর্ববর্তী অভিব্যক্তির 0 বা তার বেশি মেলাতে * ব্যবহার করে লাইনগুলি খুঁজে পেতে:

$খপ্পর'^Xy*z 'myfile

কোন অক্ষরের 0 বা তার বেশি মেলাতে।* ব্যবহার করে লাইন খুঁজে পেতে:

$খপ্পর'' এক্স।*z 'myfile

ব্যবহার করে লাইন খুঁজে পেতে * অক্ষর এড়াতে:

$খপ্পর'' এক্স ''*z 'myfile

অক্ষর ব্যবহার খুঁজে পেতে:

$খপ্পর'\' আমার কাগজপত্র

অভিব্যক্তি grep - egrep

দ্য খপ্পর কমান্ড উপলব্ধ রেগুলার এক্সপ্রেশনগুলির শুধুমাত্র একটি উপসেট সমর্থন করে। যাইহোক, কমান্ড egrep:

  • সমস্ত রেগুলার এক্সপ্রেশন এর সম্পূর্ণ ব্যবহারের অনুমতি দেয়
  • একই সাথে একাধিক অভিব্যক্তি অনুসন্ধান করতে পারে

লক্ষ্য করুন যে অভিব্যক্তিগুলি উদ্ধৃতির একটি জোড়া মধ্যে আবদ্ধ করা আবশ্যক।

রং ব্যবহার করতে, use রঙ ব্যবহার করুন অথবা আবার একটি উপনাম তৈরি করুন:

$উপনাম egrep='egrep -color'

যাতে একাধিক অনুসন্ধান করা যায় regex দ্য egrep কমান্ড একাধিক লাইনের উপর লেখা যেতে পারে। যাইহোক, এই বিশেষ অক্ষরগুলি ব্যবহার করেও এটি করা যেতে পারে:

| বিকল্প, এক বা অন্য
(…) একটি অভিব্যক্তির অংশের লজিক্যাল গ্রুপিং
$egrep '(^root |^uucp |^mail)' /ইত্যাদি/passwd

এটি ফাইল থেকে রুট, uucp বা মেইল ​​দিয়ে শুরু হওয়া লাইনগুলি বের করে প্রতীক অর্থ বিকল্পগুলির মধ্যে একটি।

নিচের কমান্ডটি হবে না কাজ, যদিও কোন বার্তা প্রদর্শিত হয় না, যেহেতু মৌলিক খপ্পর কমান্ড সব নিয়মিত এক্সপ্রেশন সমর্থন করে না:

$খপ্পর '(^root |^uucp |^mail)' /ইত্যাদি/passwd

যাইহোক, বেশিরভাগ লিনাক্স সিস্টেমে কমান্ড গ্রেপ -ই ব্যবহার করার মতই egrep :

$খপ্পর -এবং '(^root |^uucp |^mail)' /ইত্যাদি/passwd

ফিল্টার ব্যবহার করে

পাইপিং একটি কমান্ডের আউটপুটকে অন্য কমান্ডে ইনপুট হিসাবে পাঠানোর প্রক্রিয়া এবং এটি পাওয়া সবচেয়ে শক্তিশালী লিনাক্স সরঞ্জামগুলির মধ্যে একটি।

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

নিম্নলিখিত উদাহরণে, থেকে স্ট্যান্ডার্ড আউটপুট ls -l স্ট্যান্ডার্ড ইনপুট হিসাবে পাস করা হয় খপ্পর কমান্ড থেকে আউটপুট খপ্পর কমান্ড তারপর ইনপুট হিসাবে পাস করা হয় আরো কমান্ড

এটি শুধুমাত্র ডিরেক্টরি প্রদর্শন করবে /ইত্যাদি :

$ls -দ্য /ইত্যাদি|খপ্পর'^ডি'|আরো

নিম্নলিখিত কমান্ডগুলি ফিল্টার ব্যবহারের উদাহরণ:

$পুনশ্চ -ইফ|খপ্পরক্রন

$WHO|খপ্পরকেডিএম

নমুনা ফাইল

পর্যালোচনা অনুশীলনের চেষ্টা করার জন্য, প্রথমে নিম্নলিখিত নমুনা ফাইলটি তৈরি করুন।

নীচের পাঠ্যটি একটি ফাইলে অনুলিপি করতে ন্যানো বা ভিমের মতো একটি সম্পাদক ব্যবহার করুন মানুষ:

ব্যক্তিগত J.Smith 25000
ব্যক্তিগত E.Smith 25400
প্রশিক্ষণ A. ব্রাউন 27500
প্রশিক্ষণ C.Browen 23400
(প্রশাসন) R.Bron 30500
Goodsout T.Smyth 30000
ব্যক্তিগত F. জোন্স 25000
প্রশিক্ষণ* C.Evans 25500
Goodsout W.Pope 30400
Groundfloor T.Smythe 30500
ব্যক্তিগত জে.মেলার 33000

ব্যায়াম II

  1. ফাইলটি প্রদর্শন করুন মানুষ এবং এর বিষয়বস্তু পরীক্ষা করে দেখুন।
  2. স্ট্রিং ধারণকারী সমস্ত লাইন খুঁজুন স্মিথ ফাইল লোকেদের মধ্যে ইঙ্গিত: grep কমান্ড ব্যবহার করুন কিন্তু মনে রাখবেন যে ডিফল্টরূপে, এটি কেস সংবেদনশীল।
  3. স্ট্রিং দিয়ে শুরু হওয়া সমস্ত লাইন সম্বলিত একটি নতুন ফাইল তৈরি করুন ব্যক্তিগত মানুষ ফাইলে।
  4. ফাইলের তালিকা করে লোকজন ফাইলের বিষয়বস্তু নিশ্চিত করুন।
  5. এখন সমস্ত লাইন যুক্ত করুন যেখানে পাঠ্যটি স্ট্রিং দিয়ে শেষ হয় 500 ফাইল লোকেদের মধ্যে ফাইল npeople.Hint: grep কমান্ডটি >> ব্যবহার করুন।
  6. আবার, ফাইল তালিকাভুক্ত করে লোকজন ফাইলের বিষয়বস্তু নিশ্চিত করুন।
  7. ফাইলে সংরক্ষিত সার্ভারের IP ঠিকানা খুঁজুন /etc/hosts .Hint: $ (hostname) দিয়ে grep কমান্ডটি ব্যবহার করুন
  8. ব্যবহার করুন egrep থেকে বের করা /etc/passwd ফাইল অ্যাকাউন্ট লাইন ধারণ করে lp অথবা আপনার নিজের ব্যবহারকারীর প্রমানপত্র

অনুশীলনের সমাধান এই নিবন্ধের শেষে পাওয়া যাবে।

আরো নিয়মিত এক্সপ্রেশন

একটি নিয়মিত অভিব্যক্তি স্টেরয়েড উপর ওয়াইল্ডকার্ড হিসাবে চিন্তা করা যেতে পারে।

বিশেষ অর্থ সহ এগারোটি অক্ষর রয়েছে: উদ্বোধনী এবং সমাপ্ত বর্গ বন্ধনী [], ব্যাকস্ল্যাশ the, ক্যারেট ^, ডলার চিহ্ন $, সময় বা বিন্দু।, উল্লম্ব বার বা পাইপ চিহ্ন |, প্রশ্ন চিহ্ন ?, নক্ষত্র বা তারকা *, প্লাস চিহ্ন + এবং খোলার এবং বন্ধ বৃত্তাকার বন্ধনী {}। এই বিশেষ চরিত্রগুলিকে প্রায়শই মেটা চরিত্র বলা হয়।

এখানে বিশেষ অক্ষরের সম্পূর্ণ সেট রয়েছে:

^ একটি লাইনের শুরু
$ একটি লাইনের শেষ
যেকোনো চরিত্র (new n নিউ লাইন বাদে)
* 0 বা তার আগের এক্সপ্রেশন
| বিকল্প, এক বা অন্য
[…] মেলে এমন অক্ষরের সুস্পষ্ট সেট
+ পূর্ববর্তী অভিব্যক্তি 1 বা তার বেশি
? পূর্ববর্তী অভিব্যক্তির 0 বা 1
একটি প্রতীকের পূর্বে এটি একটি আক্ষরিক চরিত্র করে তোলে
{…} স্পষ্ট কোয়ান্টিফায়ার নোটেশন
(…) একটি অভিব্যক্তির অংশের লজিক্যাল গ্রুপিং

এর ডিফল্ট সংস্করণ খপ্পর শুধুমাত্র সীমিত রেগুলার এক্সপ্রেশন সাপোর্ট আছে। নিচের সমস্ত উদাহরণের জন্য কাজ করার জন্য, ব্যবহার করুন egrep পরিবর্তে বা গ্রেপ -ই

ব্যবহার করে লাইন খুঁজে পেতে | উভয় অভিব্যক্তি মেলে:

$egrep'Xxz|xzz 'myfile

ব্যবহার করে লাইন খুঁজে পেতে একটি স্ট্রিং মধ্যে অভিব্যক্তি মেলে এছাড়াও () ব্যবহার করুন:

$egrep'' এক্স(Yz|yz)' আমার কাগজপত্র

যেকোনো অক্ষরের সাথে মেলাতে [] ব্যবহার করে লাইন খুঁজে পেতে:

$egrep'' এক্স[Yy]z 'myfile

[] ব্যবহার করে লাইন খুঁজে পেতে কোনো চরিত্রের সাথে মেলে না:

$egrep'' এক্স[Y হ্যাঁ]z 'myfile

পূর্ববর্তী অভিব্যক্তির 0 বা তার বেশি মেলাতে * ব্যবহার করে লাইনগুলি খুঁজে পেতে:

$egrep'^Xy*z 'myfile

পূর্ববর্তী অভিব্যক্তির 1 বা তার বেশি মেলাতে + ব্যবহার করে লাইনগুলি খুঁজে পেতে:

$egrep'^Xy+z' myfile

ব্যবহার করে লাইন খুঁজে পেতে? পূর্ববর্তী অভিব্যক্তির 0 বা 1 এর সাথে মেলে:

$egrep'^Xy? Z' myfile

ব্যায়াম III

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

আরো উদাহরণ

ব্যবহার করে লাইন খুঁজে পেতে এবং * অক্ষরের যেকোনো সেট মেলে:

$egrep'^Xy।*z 'myfile

অক্ষরের N সংখ্যার সাথে মিল করতে {} ব্যবহার করে লাইন খুঁজে পেতে:

$egrep'^Xy{3}z 'myfile
$egrep'^Xy{4}z 'myfile

{} ব্যবহার করে লাইনগুলি খুঁজে পেতে N বা তার বেশি বার মিলুন:

$egrep'^Xy{3,}z 'myfile

N বার মিলিয়ে {} ব্যবহার করে লাইন খুঁজে পেতে কিন্তু M বারের বেশি নয়:

$egrep'^Xy{2,3}z 'myfile

উপসংহার

এই টিউটোরিয়ালে আমরা প্রথমে ব্যবহারের দিকে তাকিয়েছিলাম খপ্পর একটি ফাইলে বা একাধিক ফাইলে টেক্সট খুঁজে পাওয়ার সহজ ফর্ম। তারপর আমরা সাধারণ নিয়মিত এক্সপ্রেশন এবং তারপর আরো জটিল ব্যবহার করে অনুসন্ধানের জন্য পাঠ্যটি একত্রিত করি egrep

পরবর্তী পদক্ষেপ

আমি আশা করি আপনি এখানে অর্জিত জ্ঞানকে ভালো কাজে লাগাবেন। চেষ্টা খপ্পর আপনার নিজের ডেটাতে কমান্ড এবং মনে রাখবেন, এখানে বর্ণিত নিয়মিত এক্সপ্রেশন একই আকারে ব্যবহার করা যেতে পারে আমরা , sed এবং awk !

ব্যায়াম সমাধান

ব্যায়াম I

প্রথমে ফাইলটিতে কত লাইন আছে তা গণনা করুন /etc/passwd
$ wc -l /etc/passwd
এখন পাঠ্যের সমস্ত ঘটনা খুঁজুন কোথায় ফাইলে /etc /passwd।
$ grep var /etc/passwd
ফাইলটিতে কতগুলি লাইন রয়েছে তা সন্ধান করুন কোথায়

খপ্পর -সিকোথায়/ইত্যাদি/passwd

কয়টি লাইনে লেখা নেই তা খুঁজুন কোথায়

খপ্পর -সিভিকোথায়/ইত্যাদি/passwd

এ আপনার লগইন এর জন্য এন্ট্রি খুঁজুন /etc/passwd ফাইল
grep kdm /etc/passwd

ব্যায়াম II

ফাইলটি প্রদর্শন করুন মানুষ এবং এর বিষয়বস্তু পরীক্ষা করে দেখুন।
$ cat people
স্ট্রিং ধারণকারী সমস্ত লাইন খুঁজুন স্মিথ ফাইলে মানুষ
$ grep 'Smith' people
একটি নতুন ফাইল তৈরি করুন, মানুষ , স্ট্রিং দিয়ে শুরু হওয়া সব লাইন ধারণ করে ব্যক্তিগত মধ্যে মানুষ ফাইল
$ grep '^Personal' people> npeople
ফাইলের বিষয়বস্তু নিশ্চিত করুন মানুষ ফাইল তালিকা করে।
$ cat npeople
এখন সমস্ত লাইন যুক্ত করুন যেখানে পাঠ্যটি স্ট্রিং দিয়ে শেষ হয় 500 ফাইলে মানুষ ফাইলে মানুষ
$ grep '500$' people>>npeople
আবার, ফাইলের বিষয়বস্তু নিশ্চিত করুন মানুষ ফাইল তালিকা করে।
$ cat npeople
ফাইলে সংরক্ষিত সার্ভারের IP ঠিকানা খুঁজুন /etc/hosts
$ grep $(hostname) /etc/hosts
ব্যবহার করুন egrep থেকে বের করা /etc/passwd ফাইল অ্যাকাউন্ট লাইন ধারণ করে lp অথবা আপনার নিজের ইউজার আইডি।
$ egrep '(lp|kdm:)' /etc/passwd

ব্যায়াম III

নাম সম্বলিত সব লাইন খুঁজুন ইভান্স অথবা চিত্রশিল্পী ফাইলে মানুষ
$ egrep 'Evans|Maler' people
নাম সম্বলিত সব লাইন খুঁজুন স্মিথ , স্মিথ অথবা স্মিথ ফাইলে মানুষ
$ egrep 'Sm(i|y)the?' people
নাম সম্বলিত সব লাইন খুঁজুন বাদামী , ব্রোয়েন অথবা সূত্র ফাইলের লোকদের মধ্যে।
$ egrep 'Brow?e?n' people
স্ট্রিং ধারণকারী লাইন খুঁজুন (অ্যাডমিন), বন্ধনী সহ, ফাইলে মানুষ

$egrep '(অ্যাডমিন)'মানুষ

অক্ষর ধারণকারী লাইন খুঁজুন * ফাইলের লোকদের মধ্যে।
$ egrep '*' people
উভয় এক্সপ্রেশন খুঁজে পেতে উপরে 5 এবং 6 একত্রিত করুন।

$egrep ' (প্রশাসক ) | *'মানুষ