وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

استفاده از grep (و egrep) با عبارات منظم

0 2
زمان لازم برای مطالعه: 8 دقیقه


این آموزش روش استفاده از هر دو را شرح می دهد grepegrep) to یافتن متن در فایل ها، به شکل ساده و زمانی که با عبارات منظم ترکیب می شود. شامل چندین است مثال ها و تمرینات، به علاوه راه حل ها، برای تماشاگر کامل شود.

نام grep از دستور ed (و vim) “g/re/p” می آید که به معنای جستجوی جهانی برای یک عبارت منظم داده شده است و print (نمایش) خروجی

منظم اصطلاحات

برنامه های کاربردی به کاربر اجازه می دهد تا فایل های متنی را برای خطوطی که با یک عبارت منظم مطابقت دارند جستجو کند (regexp). یک عبارت منظم یک رشته جستجو است که از متن و یک یا چند 11 کاراکتر خاص تشکیل شده است. یک مثال ساده تطبیق شروع یک خط است.

فایل نمونه

شکل اساسی از grep ممکن است برای یافتن متن ساده در یک فایل یا فایل خاص استفاده شود. برای امتحان نمونه ها ابتدا فایل نمونه ایجاد کنید.

از یک ویرایشگر مانند nano یا vim برای کپی کردن متن زیر در فایلی به نام استفاده کنید myfile.

xyz
xyzde
exyzd
دکسیز
d؟gxyz
xxz
xzz
x\z
ایکس*z
xz
xz
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyyz

اگرچه می‌توانید نمونه‌های موجود در متن را کپی و جای‌گذاری کنید (توجه داشته باشید که نقل قول‌های دوگانه ممکن است به درستی کپی نشوند)، دستورها باید تایپ شوند تا آنها را به درستی یاد بگیرید.

قبل از امتحان کردن نمونه ها، فایل نمونه را مشاهده کنید:

گربه myfile
xyz
xyzde
exyzd
دکسیز
d؟gxyz
xxz
xzz
x\z
x*z
xz
xz
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyyz

جستجوی ساده

برای یافتن متن “xyz” در فایل، موارد زیر را اجرا کنید:

grep xyz myfile
xyz
xyzde
exyzd
دکسیز
d؟gxyz

گزینه ها

گزینه های رایج مورد استفاده با grep دستور شامل:

  • من همه خطوط را پیدا می کنم قطع نظر از مورد
  • شمردن چند خط حاوی متن است
  • -n خط نمایش شماره از خطوط منطبق
  • -l فقط نمایش داده می شود فایل نام ها آن مسابقه
  • -r بازگشتی جستجوی دایرکتوری های فرعی
  • -v همه خطوط را پیدا کنید نه حاوی متن

مثلا:

grep -من xyz myfile
# متن را بدون توجه به مورد پیدا کنید
xyz
xyzde
exyzd
دکسیز
d؟gxyz
XYZ
xYz
grep -مدار مجتمع xyz myfile
# تعداد خطوط با متن
7
grep -که در xyz myfile
# نمایش شماره خطوط
1: xyz
2: xyzde
3:exyzd
4: دکسیز
5:d؟gxyz
12: XYZ
14: xYz

ایجاد چندین فایل

قبل از تلاش برای جستجوی چندین فایل، ابتدا چندین فایل جدید ایجاد کنید:

echo xyz > myfile1
گربه myfile1
xyz
echo -e ‘xyz\nxzz\nXYZ’ > myfile2
گربه myfile2
xyz
xzz
XYZ
echo -e ‘xxx\nyyy’ > myfile3
گربه myfile3
xxx
سال

جستجو در چندین فایل

برای جستجوی چندین فایل با استفاده از نام فایل یا علامت عام وارد کنید:

grep -مدار مجتمع xyz myfile myfile1 myfile2 myfile3
myfile:7
myfile1:1
myfile2:2
myfile3:0
# نام فایل مطابق با «my» شروع می شود
grep -که در xyz من*
myfile:1:xyz
myfile:2:xyzde
myfile:3:exyzd
myfile:4:dexyz
myfile:5:d؟gxyz
myfile:12:XYZ
myfile:14:xYz
myfile1:1:xyz
myfile2:1:xyz
myfile2:3:XYZ

ورزش I

  1. ابتدا شمارش کنید که چند خط در فایل /etc/passwd وجود دارد.
نکته: استفاده کنید دستشویی /و غیره/passwd
  1. اکنون همه موارد تکرار متن را پیدا کنید var در فایل /etc/passwd.
  2. ببینید چند خط در فایل حاوی متن است
  3. بیابید چند خط حاوی متن نیست var.
  4. ورودی برای ورود خود را در /etc/passwd

راه حل های ورزش را می توانید در انتهای این مقاله بیابید.

استفاده از عبارات منظم

دستور grep همچنین ممکن است با عبارات منظم با استفاده از یک یا چند نویسه یا نماد خاص برای اصلاح جستجو استفاده شود. یک عبارت منظم یک رشته کاراکتر است که شامل کاراکترهای خاصی است تا امکان تطبیق الگو در ابزارهایی مانند grep، vim و sed. توجه داشته باشید که ممکن است لازم باشد رشته ها در داخل گیومه قرار بگیرند.

کاراکترهای ویژه موجود عبارتند از:

^ شروع یک خط
$ انتهای یک خط
. هر کاراکتری (به جز \n خط جدید)
* 0 یا بیشتر از عبارت قبلی
\ قبل از یک نماد آن را به یک کاراکتر تحت اللفظی تبدیل می کند

توجه داشته باشید که *، که ممکن است در خط فرمان برای مطابقت با هر تعداد کاراکتر از جمله هیچ کدام استفاده شود، است نه در اینجا به همین صورت استفاده می شود.

همچنین به استفاده از نقل قول در مثال های زیر توجه کنید.

مثال ها

برای پیدا کردن تمام خطوطی که با متن شروع می شوند با استفاده از کاراکتر ^:

grep ‘^xyz’ myfile

برای پیدا کردن تمام خطوطی که به متن ختم می شوند با استفاده از کاراکتر $:

grep ‘xyz$’ myfile

برای پیدا کردن خطوط حاوی یک رشته با استفاده از هر دو کاراکتر ^ و $:

grep ‘^xyz$’ myfile

برای پیدا کردن خطوط با استفاده از . برای مطابقت با هر شخصیت:

grep ‘^xz’ myfile

استفاده از grep (و egrep) با عبارات منظم

برای پیدا کردن خطوط با استفاده از * برای مطابقت با 0 یا بیشتر از عبارت قبلی:

grep ‘^xy*z’ myfile

برای یافتن خطوط با استفاده از .* برای مطابقت با 0 یا بیشتر از هر کاراکتری:

grep ‘^x.*z’ myfile

برای پیدا کردن خطوط با استفاده از \ برای فرار از کاراکتر *:

grep ‘^x\*z’ myfile

برای پیدا کردن کاراکتر \ از:

grep ‘\\’ myfile

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

عبارت grep – egrep

این grep فرمان فقط از زیر مجموعه ای از عبارات منظم موجود پشتیبانی می کند. با این حال، فرمان egrep:

  • امکان استفاده کامل از تمام عبارات منظم را فراهم می کند
  • ممکن است به طور همزمان بیش از یک عبارت را جستجو کند
پیشنهاد می‌کنیم بخوانید:  روش استفاده موثر از متغیرها در Bash

توجه داشته باشید که عبارات باید در یک جفت نقل قول قرار بگیرند.

به منظور جستجو برای بیش از یک regex را egrep دستور ممکن است در چندین خط نوشته شود. با این حال، این کار را می توان با استفاده از این کاراکترهای خاص نیز انجام داد:

| تناوب، یا یکی یا دیگری
(…) گروه بندی منطقی بخشی از یک عبارت
egrep ‘(^root|^uucp|^mail)’ /و غیره/passwd

این خطوطی را که با آن شروع می شوند استخراج می کند root، uucp یا ایمیل از فایل، | نماد به معنای هر یک از گزینه ها است.

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

دستور زیر خواهد بود نه کار، اگرچه هیچ پیامی نمایش داده نمی شود، از ابتدایی grep دستور از تمام عبارات منظم پشتیبانی نمی کند:

grep ‘(^root|^uucp|^mail)’ /و غیره/passwd

با این حال، روی اکثر سیستم های لینوکس این دستور را دارند grep -E همان استفاده است egrep:

grep -ای ‘(^root|^uucp|^mail)’ /و غیره/passwd

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

استفاده از فیلترها

لوله کشی هست process ارسال خروجی یک دستور به عنوان ورودی به دستور دیگر و یکی از قدرتمندترین ابزارهای لینوکس موجود است.

دستوراتی که در خط لوله ظاهر می شوند اغلب به عنوان فیلتر نامیده می شوند زیرا در بسیاری از موارد آنها قبل از ارسال جریان اصلاح شده به خروجی استاندارد، ورودی ارسال شده به آنها را غربال می کنند یا تغییر می دهند.

در مثال زیر، خروجی استاندارد از ls -l به عنوان ورودی استاندارد به grep فرمان خروجی از grep سپس دستور به عنوان ورودی به بیشتر فرمان

این فقط دایرکتوری ها را در داخل نمایش می دهد /و غیره:

ls /و غیره|grep ‘^d’|بیشتر

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

دستورات زیر نمونه هایی از استفاده از فیلترها هستند:

ps -ef|grep cron

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

سازمان بهداشت جهانی|grep kdm

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

فایل نمونه

برای امتحان تمرین مرور ابتدا فایل نمونه زیر را ایجاد کنید.

از یک ویرایشگر مانند nano یا vim برای کپی کردن متن زیر در فایلی به نام استفاده کنید مردم:

شخصی جی اسمیت 25000

ای اسمیت شخصی 25400

آموزش A.Brown 27500

آموزش سی.براون 23400
(مدیر) آر.برون 30500

Goodsout T.Smyth 30000

F.Jones شخصی 25000

آموزش* سی ایوانز 25500

Goodsout W. Pope 30400

T.Smythe طبقه همکف 30500

جی.مالر شخصی 33000

تمرین II

  1. فایل را نمایش دهید مردم و محتویات آن را بررسی کنید.
  2. تمام خطوط حاوی رشته را پیدا کنید اسمیت در فایل people.Hint: از دستور grep استفاده کنید اما به یاد داشته باشید که به طور پیش فرض به حروف بزرگ و کوچک حساس است.
  3. یک فایل جدید به نام npeople ایجاد کنید که شامل تمام خطوطی است که با رشته شروع می شوند شخصی در فایل people.Hint: از دستور grep با > استفاده کنید.
  4. محتویات فایل npeople را با لیست کردن فایل تایید کنید.
  5. اکنون تمام خطوط را در جایی که متن با رشته به پایان می رسد اضافه کنید 500 در فایل افراد به فایل npeople.Hint: از دستور grep با >> استفاده کنید.
  6. مجدداً با فهرست کردن فایل، محتوای فایل npeople را تأیید کنید.
  7. آدرس IP سرور ذخیره شده در فایل را پیدا کنید /etc/hostsنکته: از دستور grep با $(hostname) استفاده کنید
  8. استفاده کنید egrep برای استخراج از /etc/passwd فایل خطوط حساب حاوی lp یا مال خودت شناسه کاربر.

راه حل های ورزش را می توانید در انتهای این مقاله بیابید.

عبارات منظم تر

یک عبارت منظم را می‌توان به عنوان حروف عام در نظر گرفت روی استروئیدها

یازده کاراکتر با معانی خاص وجود دارد: باز و بسته شدن براکت [ ]، علامت عقب \، علامت ^، علامت دلار، نقطه یا نقطه {}. این شخصیت های خاص اغلب متاکاراکتر نیز نامیده می شوند.

در اینجا مجموعه کامل شخصیت های خاص است:

^ شروع یک خط
$ انتهای یک خط
. هر کاراکتری (به جز \n خط جدید)
* 0 یا بیشتر از عبارت قبلی
| تناوب، یا یکی یا دیگری
[…] مجموعه ای صریح از شخصیت ها برای مطابقت
+ 1 یا بیشتر از عبارت قبلی
? 0 یا 1 عبارت قبلی
\ قبل از یک نماد آن را به یک کاراکتر تحت اللفظی تبدیل می کند
{…} نماد کمیت صریح
(…) گروه بندی منطقی بخشی از یک عبارت
پیشنهاد می‌کنیم بخوانید:  روش باز کردن فایل در bash

نسخه پیش فرض grep فقط پشتیبانی از بیان منظم محدود دارد. برای اینکه تمام مثال های زیر کار کنند، از آن استفاده کنید egrep در عوض یا grep -E.

برای پیدا کردن خطوط با استفاده از | برای مطابقت با هر عبارت:

egrep ‘xxz|xzz’ myfile

برای یافتن خطوط با استفاده از | برای مطابقت با هر یک از عبارت ها در یک رشته از ( ) نیز استفاده کنید:

egrep ‘^x(Yz|yz)’ myfile

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

برای پیدا کردن خطوط با استفاده از [ ] برای مطابقت با هر شخصیت:

egrep ‘^x[Yy]z’ myfile

برای پیدا کردن خطوط با استفاده از [ ] برای مطابقت نداشتن با هیچ شخصیتی:

egrep ‘^x[^Yy]z’ myfile

برای پیدا کردن خطوط با استفاده از * برای مطابقت با 0 یا بیشتر از عبارت قبلی:

egrep ‘^xy*z’ myfile

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

برای پیدا کردن خطوط با استفاده از + برای مطابقت با 1 یا بیشتر از عبارت قبلی:

egrep ‘^xy+z’ myfile

برای پیدا کردن خطوط با استفاده از ? برای مطابقت با 0 یا 1 عبارت قبلی:

egrep ‘^xy؟z’ myfile

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

تمرین III

  1. تمام خطوط حاوی نام ها را پیدا کنید ایوانز یا مالر در فایل افراد
  2. تمام خطوط حاوی نام ها را پیدا کنید اسمیت، اسمیت یا اسمیت در فایل افراد
  3. تمام خطوط حاوی نام ها را پیدا کنید براون، براون یا برون در فایل people.اگر وقت دارید:
  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

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

نتیجه

در این آموزش ابتدا به استفاده از آن پرداختیم grep به شکلی ساده برای یافتن متن در یک فایل یا در چندین فایل. سپس متن مورد جستجو را با عبارات منظم ساده و سپس با استفاده از عبارات پیچیده تر ترکیب کردیم egrep.

مراحل بعدی

امیدوارم از دانش به دست آمده در اینجا به خوبی استفاده کنید. امتحان کنید grep دستورات روی داده های خود را به خاطر بسپارید، عبارات منظم همانطور که در اینجا توضیح داده شده است را می توان به همان شکل در آن استفاده کرد vi، sed و بیخیال!

راه حل های تمرین

ورزش I

ابتدا شمارش کنید که چند خط در فایل وجود دارد /etc/passwd.

دستشویی /و غیره/passwd

اکنون همه موارد تکرار متن را پیدا کنید var در فایل /etc/passwd.

grep var /و غیره/passwd

ببینید چند خط در فایل حاوی متن است var

grep var /و غیره/passwd

بیابید چند خط حاوی متن نیست var.

grep -رزومه var /و غیره/passwd

ورودی برای ورود خود را در /etc/passwd فایل

grep kdm /و غیره/passwd

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

تمرین II

نمایش فایل مردم و محتویات آن را بررسی کنید.

گربه مردم

تمام خطوط حاوی رشته را پیدا کنید اسمیت در فایل مردم.

grep اسمیت مردم

یک فایل جدید ایجاد کنید، مردم، شامل تمام خطوطی است که با رشته شروع می شوند شخصی در مردم فایل

grep ‘^شخصی’ مردم> مردم

محتویات فایل را تایید کنید مردم با لیست کردن فایل

گربه مردم

اکنون تمام خطوط را در جایی که متن با رشته به پایان می رسد اضافه کنید 500 در فایل مردم به فایل مردم.

grep ‘500 دلار’ مردم>>مردم

مجدداً محتویات فایل را تأیید کنید مردم با لیست کردن فایل

گربه مردم

آدرس IP سرور ذخیره شده در فایل را پیدا کنید /etc/hosts.

grep $(نام میزبان) /و غیره/میزبان ها

استفاده کنید egrep برای استخراج از /etc/passwd فایل خطوط حساب حاوی lp یا شناسه کاربری خودتان

egrep ‘(lp|kdm:)’ /و غیره/passwd

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

تمرین III

تمام خطوط حاوی نام ها را پیدا کنید ایوانز یا مالر در فایل مردم.

egrep “ایوانز|مالر” مردم

تمام خطوط حاوی نام ها را پیدا کنید اسمیت، اسمیت یا اسمیت در فایل مردم.

egrep ‘Sm(i|y)the؟’ مردم

تمام خطوط حاوی نام ها را پیدا کنید رنگ قهوه ای، براون یا برون در فایل افراد

egrep “برو؟ e؟n” مردم

خط حاوی رشته را پیدا کنید (مدیر)، از جمله براکت ها، در فایل مردم.

$ egrep ‘\(مدیر\)’ مردم

خط حاوی کاراکتر را پیدا کنید * در فایل افراد

egrep ‘\*’ مردم

5 و 6 بالا را با هم ترکیب کنید تا هر دو عبارت را پیدا کنید.

egrep ‘\(Admin\)|\*’ مردم

استفاده از grep (و egrep) با عبارات منظماستفاده از grep (و egrep) با عبارات منظم

برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1402-12-31 13:45:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید