از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
استفاده از grep (و egrep) با عبارات منظم
سرفصلهای مطلب
این آموزش روش استفاده از هر دو را شرح می دهد grep (و egrep) to یافتن متن در فایل ها، به شکل ساده و زمانی که با عبارات منظم ترکیب می شود. شامل چندین است مثال ها و تمرینات، به علاوه راه حل ها، برای تماشاگر کامل شود.
نام grep از دستور ed (و vim) “g/re/p” می آید که به معنای جستجوی جهانی برای یک عبارت منظم داده شده است و print (نمایش) خروجی
منظم اصطلاحات
برنامه های کاربردی به کاربر اجازه می دهد تا فایل های متنی را برای خطوطی که با یک عبارت منظم مطابقت دارند جستجو کند (regexp). یک عبارت منظم یک رشته جستجو است که از متن و یک یا چند 11 کاراکتر خاص تشکیل شده است. یک مثال ساده تطبیق شروع یک خط است.
فایل نمونه
شکل اساسی از grep ممکن است برای یافتن متن ساده در یک فایل یا فایل خاص استفاده شود. برای امتحان نمونه ها ابتدا فایل نمونه ایجاد کنید.
از یک ویرایشگر مانند nano یا vim برای کپی کردن متن زیر در فایلی به نام استفاده کنید myfile.
xyzde
exyzd
دکسیز
d؟gxyz
xxz
xzz
x\z
ایکس*z
xz
xz
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyyz
اگرچه میتوانید نمونههای موجود در متن را کپی و جایگذاری کنید (توجه داشته باشید که نقل قولهای دوگانه ممکن است به درستی کپی نشوند)، دستورها باید تایپ شوند تا آنها را به درستی یاد بگیرید.
قبل از امتحان کردن نمونه ها، فایل نمونه را مشاهده کنید:
xyzde
exyzd
دکسیز
d؟gxyz
xxz
xzz
x\z
x*z
xz
xz
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyyz
جستجوی ساده
برای یافتن متن “xyz” در فایل، موارد زیر را اجرا کنید:
xyzde
exyzd
دکسیز
d؟gxyz
گزینه ها
گزینه های رایج مورد استفاده با grep دستور شامل:
- من همه خطوط را پیدا می کنم قطع نظر از مورد
- -ج شمردن چند خط حاوی متن است
- -n خط نمایش شماره از خطوط منطبق
- -l فقط نمایش داده می شود فایل نام ها آن مسابقه
- -r بازگشتی جستجوی دایرکتوری های فرعی
- -v همه خطوط را پیدا کنید نه حاوی متن
مثلا:
# متن را بدون توجه به مورد پیدا کنید
xyzde
exyzd
دکسیز
d؟gxyz
XYZ
xYz
# تعداد خطوط با متن
# نمایش شماره خطوط
2: xyzde
3:exyzd
4: دکسیز
5:d؟gxyz
12: XYZ
14: xYz
ایجاد چندین فایل
قبل از تلاش برای جستجوی چندین فایل، ابتدا چندین فایل جدید ایجاد کنید:
گربه myfile1
گربه myfile2
xzz
XYZ
گربه myfile3
سال
جستجو در چندین فایل
برای جستجوی چندین فایل با استفاده از نام فایل یا علامت عام وارد کنید:
myfile1:1
myfile2:2
myfile3:0
grep -که در 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
- ابتدا شمارش کنید که چند خط در فایل /etc/passwd وجود دارد.
- اکنون همه موارد تکرار متن را پیدا کنید var در فایل /etc/passwd.
- ببینید چند خط در فایل حاوی متن است
- بیابید چند خط حاوی متن نیست var.
- ورودی برای ورود خود را در /etc/passwd
راه حل های ورزش را می توانید در انتهای این مقاله بیابید.
استفاده از عبارات منظم
دستور grep همچنین ممکن است با عبارات منظم با استفاده از یک یا چند نویسه یا نماد خاص برای اصلاح جستجو استفاده شود. یک عبارت منظم یک رشته کاراکتر است که شامل کاراکترهای خاصی است تا امکان تطبیق الگو در ابزارهایی مانند grep، vim و sed. توجه داشته باشید که ممکن است لازم باشد رشته ها در داخل گیومه قرار بگیرند.
کاراکترهای ویژه موجود عبارتند از:
^ | شروع یک خط |
$ | انتهای یک خط |
. | هر کاراکتری (به جز \n خط جدید) |
* | 0 یا بیشتر از عبارت قبلی |
\ | قبل از یک نماد آن را به یک کاراکتر تحت اللفظی تبدیل می کند |
توجه داشته باشید که *، که ممکن است در خط فرمان برای مطابقت با هر تعداد کاراکتر از جمله هیچ کدام استفاده شود، است نه در اینجا به همین صورت استفاده می شود.
همچنین به استفاده از نقل قول در مثال های زیر توجه کنید.
مثال ها
برای پیدا کردن تمام خطوطی که با متن شروع می شوند با استفاده از کاراکتر ^:
برای پیدا کردن تمام خطوطی که به متن ختم می شوند با استفاده از کاراکتر $:
برای پیدا کردن خطوط حاوی یک رشته با استفاده از هر دو کاراکتر ^ و $:
برای پیدا کردن خطوط با استفاده از . برای مطابقت با هر شخصیت:
برای پیدا کردن خطوط با استفاده از * برای مطابقت با 0 یا بیشتر از عبارت قبلی:
برای یافتن خطوط با استفاده از .* برای مطابقت با 0 یا بیشتر از هر کاراکتری:
برای پیدا کردن خطوط با استفاده از \ برای فرار از کاراکتر *:
برای پیدا کردن کاراکتر \ از:
عبارت grep – egrep
این grep فرمان فقط از زیر مجموعه ای از عبارات منظم موجود پشتیبانی می کند. با این حال، فرمان egrep:
- امکان استفاده کامل از تمام عبارات منظم را فراهم می کند
- ممکن است به طور همزمان بیش از یک عبارت را جستجو کند
توجه داشته باشید که عبارات باید در یک جفت نقل قول قرار بگیرند.
به منظور جستجو برای بیش از یک regex را egrep دستور ممکن است در چندین خط نوشته شود. با این حال، این کار را می توان با استفاده از این کاراکترهای خاص نیز انجام داد:
| | تناوب، یا یکی یا دیگری |
(…) | گروه بندی منطقی بخشی از یک عبارت |
این خطوطی را که با آن شروع می شوند استخراج می کند root، uucp یا ایمیل از فایل، | نماد به معنای هر یک از گزینه ها است.
دستور زیر خواهد بود نه کار، اگرچه هیچ پیامی نمایش داده نمی شود، از ابتدایی grep دستور از تمام عبارات منظم پشتیبانی نمی کند:
با این حال، روی اکثر سیستم های لینوکس این دستور را دارند grep -E همان استفاده است egrep:
استفاده از فیلترها
لوله کشی هست process ارسال خروجی یک دستور به عنوان ورودی به دستور دیگر و یکی از قدرتمندترین ابزارهای لینوکس موجود است.
دستوراتی که در خط لوله ظاهر می شوند اغلب به عنوان فیلتر نامیده می شوند زیرا در بسیاری از موارد آنها قبل از ارسال جریان اصلاح شده به خروجی استاندارد، ورودی ارسال شده به آنها را غربال می کنند یا تغییر می دهند.
در مثال زیر، خروجی استاندارد از ls -l به عنوان ورودی استاندارد به grep فرمان خروجی از grep سپس دستور به عنوان ورودی به بیشتر فرمان
این فقط دایرکتوری ها را در داخل نمایش می دهد /و غیره:
دستورات زیر نمونه هایی از استفاده از فیلترها هستند:
فایل نمونه
برای امتحان تمرین مرور ابتدا فایل نمونه زیر را ایجاد کنید.
از یک ویرایشگر مانند nano یا vim برای کپی کردن متن زیر در فایلی به نام استفاده کنید مردم:
ای اسمیت شخصی 25400
آموزش A.Brown 27500
آموزش سی.براون 23400
(مدیر) آر.برون 30500
Goodsout T.Smyth 30000
F.Jones شخصی 25000
آموزش* سی ایوانز 25500
Goodsout W. Pope 30400
T.Smythe طبقه همکف 30500
جی.مالر شخصی 33000
تمرین II
- فایل را نمایش دهید مردم و محتویات آن را بررسی کنید.
- تمام خطوط حاوی رشته را پیدا کنید اسمیت در فایل people.Hint: از دستور grep استفاده کنید اما به یاد داشته باشید که به طور پیش فرض به حروف بزرگ و کوچک حساس است.
- یک فایل جدید به نام npeople ایجاد کنید که شامل تمام خطوطی است که با رشته شروع می شوند شخصی در فایل people.Hint: از دستور grep با > استفاده کنید.
- محتویات فایل npeople را با لیست کردن فایل تایید کنید.
- اکنون تمام خطوط را در جایی که متن با رشته به پایان می رسد اضافه کنید 500 در فایل افراد به فایل npeople.Hint: از دستور grep با >> استفاده کنید.
- مجدداً با فهرست کردن فایل، محتوای فایل npeople را تأیید کنید.
- آدرس IP سرور ذخیره شده در فایل را پیدا کنید /etc/hostsنکته: از دستور grep با $(hostname) استفاده کنید
- استفاده کنید egrep برای استخراج از /etc/passwd فایل خطوط حساب حاوی lp یا مال خودت شناسه کاربر.
راه حل های ورزش را می توانید در انتهای این مقاله بیابید.
عبارات منظم تر
یک عبارت منظم را میتوان به عنوان حروف عام در نظر گرفت روی استروئیدها
یازده کاراکتر با معانی خاص وجود دارد: باز و بسته شدن براکت [ ]، علامت عقب \، علامت ^، علامت دلار، نقطه یا نقطه {}. این شخصیت های خاص اغلب متاکاراکتر نیز نامیده می شوند.
در اینجا مجموعه کامل شخصیت های خاص است:
^ | شروع یک خط |
$ | انتهای یک خط |
. | هر کاراکتری (به جز \n خط جدید) |
* | 0 یا بیشتر از عبارت قبلی |
| | تناوب، یا یکی یا دیگری |
[…] | مجموعه ای صریح از شخصیت ها برای مطابقت |
+ | 1 یا بیشتر از عبارت قبلی |
? | 0 یا 1 عبارت قبلی |
\ | قبل از یک نماد آن را به یک کاراکتر تحت اللفظی تبدیل می کند |
{…} | نماد کمیت صریح |
(…) | گروه بندی منطقی بخشی از یک عبارت |
نسخه پیش فرض grep فقط پشتیبانی از بیان منظم محدود دارد. برای اینکه تمام مثال های زیر کار کنند، از آن استفاده کنید egrep در عوض یا grep -E.
برای پیدا کردن خطوط با استفاده از | برای مطابقت با هر عبارت:
برای یافتن خطوط با استفاده از | برای مطابقت با هر یک از عبارت ها در یک رشته از ( ) نیز استفاده کنید:
برای پیدا کردن خطوط با استفاده از [ ] برای مطابقت با هر شخصیت:
برای پیدا کردن خطوط با استفاده از [ ] برای مطابقت نداشتن با هیچ شخصیتی:
برای پیدا کردن خطوط با استفاده از * برای مطابقت با 0 یا بیشتر از عبارت قبلی:
برای پیدا کردن خطوط با استفاده از + برای مطابقت با 1 یا بیشتر از عبارت قبلی:
برای پیدا کردن خطوط با استفاده از ? برای مطابقت با 0 یا 1 عبارت قبلی:
تمرین III
- تمام خطوط حاوی نام ها را پیدا کنید ایوانز یا مالر در فایل افراد
- تمام خطوط حاوی نام ها را پیدا کنید اسمیت، اسمیت یا اسمیت در فایل افراد
- تمام خطوط حاوی نام ها را پیدا کنید براون، براون یا برون در فایل people.اگر وقت دارید:
- خط حاوی رشته را پیدا کنید (مدیر)، از جمله براکت ها، در افراد فایل.
- خط حاوی کاراکتر * را در فایل افراد پیدا کنید.
- 5 و 6 بالا را با هم ترکیب کنید تا هر دو عبارت را پیدا کنید.
نمونه های بیشتر
برای پیدا کردن خطوط با استفاده از . و * برای مطابقت با هر مجموعه ای از کاراکترها:
برای یافتن خطوط با استفاده از { } برای مطابقت با N تعداد کاراکتر:
برای پیدا کردن خطوط با استفاده از { } برای تطبیق N بار یا بیشتر:
برای یافتن خطوط با استفاده از { } برای مطابقت با N بار اما نه بیشتر از M بار:
نتیجه
در این آموزش ابتدا به استفاده از آن پرداختیم grep به شکلی ساده برای یافتن متن در یک فایل یا در چندین فایل. سپس متن مورد جستجو را با عبارات منظم ساده و سپس با استفاده از عبارات پیچیده تر ترکیب کردیم egrep.
مراحل بعدی
امیدوارم از دانش به دست آمده در اینجا به خوبی استفاده کنید. امتحان کنید grep دستورات روی داده های خود را به خاطر بسپارید، عبارات منظم همانطور که در اینجا توضیح داده شده است را می توان به همان شکل در آن استفاده کرد vi، sed و بیخیال!
راه حل های تمرین
ورزش I
ابتدا شمارش کنید که چند خط در فایل وجود دارد /etc/passwd.
اکنون همه موارد تکرار متن را پیدا کنید var در فایل /etc/passwd.
ببینید چند خط در فایل حاوی متن است var
بیابید چند خط حاوی متن نیست var.
ورودی برای ورود خود را در /etc/passwd فایل
تمرین II
نمایش فایل مردم و محتویات آن را بررسی کنید.
تمام خطوط حاوی رشته را پیدا کنید اسمیت در فایل مردم.
یک فایل جدید ایجاد کنید، مردم، شامل تمام خطوطی است که با رشته شروع می شوند شخصی در مردم فایل
محتویات فایل را تایید کنید مردم با لیست کردن فایل
اکنون تمام خطوط را در جایی که متن با رشته به پایان می رسد اضافه کنید 500 در فایل مردم به فایل مردم.
مجدداً محتویات فایل را تأیید کنید مردم با لیست کردن فایل
آدرس IP سرور ذخیره شده در فایل را پیدا کنید /etc/hosts.
استفاده کنید egrep برای استخراج از /etc/passwd فایل خطوط حساب حاوی lp یا شناسه کاربری خودتان
تمرین III
تمام خطوط حاوی نام ها را پیدا کنید ایوانز یا مالر در فایل مردم.
تمام خطوط حاوی نام ها را پیدا کنید اسمیت، اسمیت یا اسمیت در فایل مردم.
تمام خطوط حاوی نام ها را پیدا کنید رنگ قهوه ای، براون یا برون در فایل افراد
خط حاوی رشته را پیدا کنید (مدیر)، از جمله براکت ها، در فایل مردم.
خط حاوی کاراکتر را پیدا کنید * در فایل افراد
5 و 6 بالا را با هم ترکیب کنید تا هر دو عبارت را پیدا کنید.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-31 13:45:03