از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
16 مثال Bash Regular Expression (RegEx) با استفاده از دستورات grep، sed و awk
سرفصلهای مطلب
Regular Expression یا Regex دنباله ای از کاراکترهای خاص است که الگویی را برای یافتن نمونه های تطبیق الگوی خاص از یک فایل و دستکاری آنها تشکیل می دهند. عمدتاً برای جستجوی کاراکترهای خاص، کلمات، فیلتر کردن یا دستکاری متن در یک فایل استفاده می شود.
Regex تا حد زیادی در زبان های برنامه نویسی از جمله در لینوکس اسکریپت نویسی Bash استفاده می شود. در این راهنما، روش استفاده از regex در Bash، عبارات منظم اصلی و روش استفاده از موتورهای مختلف پردازش regex را توضیح خواهم داد.
- Regex چیست؟
- نسخه های Regex
- نحو Regex
- اجزای دستور Regex
- 16 مثال از استفاده از Regex در لینوکس
- ورق تقلب Regex
- نتیجه
Regex چیست؟
عبارت منظم یا regex در لینوکس الگویی است که از متاکاراکترهای خاص برای مطابقت با الگوی خاص در یک رشته یا فایل متنی تشکیل شده است.
بیایید آن را با یک مثال واقعی درک کنیم، فرض کنید می خواهید یک کد بنویسید تا چند متغیر خاص را پیدا کنید و سپس آنها را در فایل کد دیگری دستکاری کنید، در این صورت ممکن است در چنین شرایطی به عبارت منظم نیاز داشته باشید.
نسخه های Regex
نسخه های مختلفی از regex وجود دارد و ذکر این نکته ضروری است که همه دستورات پردازنده regex از تمام regex پشتیبانی نمی کنند.
- بیان منظم پایه (BRE)
- عبارت منظم توسعه یافته (ERE)
- عبارت منظم سازگار پرل (PCRE)
BRE و ERE به صورت زیر طبقه بندی می شوند:
- POSIX BRE/ERE
- GNU BRE/ERE
POSIX BRE و POSIX ERE زیر مجموعه ای از GNU BRE و ERE و GNU BRE/ERE زیر مجموعه ای از PCRE است.
نحو Regex
ناهمسان command-line برنامه های کاربردی با عبارات منظم استفاده می شوند، مانند:
- grep
- sed
- بیخیال
این دستورات موتورهای regex نیز نامیده می شوند که به ترجمه عبارات منظم پیچیده کمک می کنند و خروجی می دهند.
دستور Regex با grep
Regex Syntax با sed
دستور Regex با awk
اجزای دستور Regex
شش جزء اصلی نحو عبارت منظم وجود دارد:
- شخصیت ها
- متا شخصیت ها
- کمیت کننده ها
- کلاس های شخصیت
- گروه بندی
- نگاه ها
شخصیت ها: این مولفه ها با استفاده از هر کاراکتر منفرد یا چند کاراکتر برای جستجوی الگوهای دقیق در رشته یا فایل، الگوها را تشکیل می دهند. به عنوان مثال، کاراکتر H برای H در فایل جستجو می کند، به طور مشابه، حروف Linux دقیقا کلمه لینوکس را در فایل جستجو می کند. با این حال، پرچم -i را میتوان برای بیحساس کردن جستجو به حروف بزرگ و کوچک استفاده کرد.
متا شخصیت ها: این مولفه ها شامل کاراکترهای خاص هستند و عملکرد خاصی دارند. به عنوان مثال، متاکاراکتر نقطه برای یافتن کاراکتر استفاده می شود، در حالی که ^ با شروع خط مطابقت دارد در حالی که $ با انتهای خط مطابقت دارد. یکی دیگر از لوله های متاکاراکتر a|b برای تطبیق a و b در فایل استفاده می شود.
کمیت کننده ها: این مولفه ها برای یافتن اینکه یک الگوی خاص چند بار باید تکرار شود استفاده می شود. مثلا علامت سوال؟ کاراکتر قبلی را فقط صفر یا یک بار تکرار می کند روی ستاره دیگر کاراکتر قبلی را صفر یا چند بار پیدا می کند.
کلاس های شخصیت: گروه کاراکترهای محصور شده در پرانتز ([]) به عنوان اجزای کلاس کاراکتر شناخته می شوند. مثلا، [0-9] اعداد از 0 تا 9 را به طور مشابه نشان می دهد [A-Z] تمام حروف الفبای A تا Z را با حروف بزرگ نشان می دهد.
گروه بندی: این جزء به گروه بندی الگو در براکت های گرد کمک می کند (). به ویژه یافتن توالی های تکرار شونده مانند شماره تلفن یا آدرس ایمیل مفید است.
نگاه ها: این مولفه برای ایجاد یک نگاه مثبت و منفی به اطراف یک الگوی قبل یا بعد از الگوی دیگری استفاده می شود. مثلا، a(?=b) به دنبال همه خواهد بود آ‘s اگر قبلا بیایند ب.
16 مثال از استفاده از Regex در لینوکس
مثالهای زیر استفاده از متاکاراکترها، کمیکنندهها، گروهها و برخی الگوهای منحصربهفرد را پوشش میدهند.
مثال 1: استفاده از عبارت نقطه (.).
نقطه متا کاراکتر اصلی عبارت منظم است که برای مطابقت با یک کاراکتر استفاده می شود. مثلا:
استفاده از grep:
استفاده از sed:
استفاده از awk:
مثال 2: استفاده از عبارت Caret (^).
گاری ^ متاکاراکتر برای یافتن تمام خطوطی که از الگوی داده شده شروع می شوند استفاده می شود. مثلا:
استفاده از grep:
استفاده از sed:
استفاده از awk:
دستورات بالا تمام ورودی های فایل را از ابتدا چاپ می کنند ک.
مثال 3: استفاده از بیان دلار ($).
این متا کاراکتر برای یافتن تمام انتهای رشته با کاراکتر خاص استفاده می شود. مثلا:
استفاده از grep:
استفاده از sed:
استفاده از awk:
دستورات بالا تمام رشته های موجود در فایل را که به آن ختم می شود را می دهد تو.
مثال 4: استفاده از ستاره
اصطلاح
ستاره * کمیت با وقوع نویسه های قبلی در رشته صفر یا بیشتر برابر است. معادل {0,} است. مثلا:
mytextfile.txt
mytextfile.txt
mytextfile.txt
مثال 5: استفاده از عبارت علامت سوال (؟).
کمیت کننده علامت سوال (؟) برای جستجوی اینکه آیا کاراکتر قبلی صفر یا یک بار اتفاق می افتد استفاده می شود. به عنوان یک واجد شرایط اختیاری عمل می کند.
mytextfile.txt
-E در دستور بالا برای regex توسعه یافته است.
mytextfile.txt
-E در دستور بالا برای regex توسعه یافته است.
mytextfile.txt
تفاوت بین کمیت کننده های ستاره و علامت سوال در تصویر زیر ذکر شده است: روی ستاره تمام نویسه های مطابق با نویسه قبلی را جستجو می کند در حالی که علامت سوال نویسه قبلی فقط مطابقت دارد.
زمان.
مثال 6: استفاده از عبارت Backslash (\).
این بک اسلش \ متاکاراکتر برای نشان دادن کاراکتر خاص استفاده می شود. به عنوان مثال، ستاره * خود یک کاراکتر خاص برای استفاده از ستاره به معنای واقعی کلمه است که ما از بک اسلش استفاده خواهیم کرد. بیایید تمام توزیع های لینوکس را در فایل پیدا کنیم mytextfile.txt
با فاصله در نام آنها.
mytextfile.txt
mytextfile.txt
mytextfile.txt
علاوه بر این، بک اسلش با دیگر شخصیت های فرار مختلف نیز استفاده می شود.
مثال 7: ایجاد گروهی از الگوها با استفاده از پرانتزهای گرد ()
پرانتزهای گرد () برای مطابقت با گروه عبارات داخل آنها استفاده می شود. بیایید با یک مثال آن را درک کنیم:
mytextfile.txt
mytextfile.txt
mytextfile.txt
در دستورات بالا، موتور در حال گرفتن مدخل هایی با تطابق با گروه است(untu) . این گروه همچنین می تواند با الگوی دیگری به دنبال آن استفاده شود. به عنوان مثال، اگر ما جایگزین (untu) گروه با (un) u
نتیجه یکسان خواهد بود.
مثال 8: ایجاد الگوهای محدوده با استفاده از پرانتزهای مجعد {} عبارت
بریس های مجعد {} کمیت کننده های تکرار هستند. شما می توانید آنها را به 3 روش مختلف استفاده کنید: {ایکس}:
x تعداد دفعات ظاهر شدن {x,y} یا {min, max}:
تعداد دفعات x ظاهر می شود اما نه بیشتر از y {ایکس،}:
x تعداد بار و بیشتر ظاهر می شود
mytextfile.txt
mytextfile.txt
mytextfile.txt
دستور بالا ورودی هایی را پیدا می کند که حاوی کاراکتر هستند لدو بار مانند بی llو اسکیll
.
مثال 9: استفاده از \d برای یافتن اعداد
عبارت \d برای یافتن رشته با اعداد در یک رشته یا فایل استفاده می شود. مثلا:
mytextfile.txt
پ نشان می دهد که یک regex سازگار با Perl است، برای جزئیات بیشتر بخوانیداینجا
. در sed و awk، \d نمی توان از آن استفاده کرد زیرا sed POSIX regex است و نه پرلPCRE بنابراین، معادل \d [0-9] در sed و awk است [[:digit:]یا]
.
mytextfile.txt
mytextfile.txt
mytextfile.txt
mytextfile.txt
مثال 10: استفاده از Logical OR Operator |
| بیان منظم به همان روشی کار می کند که گیت منطقی OR کار می کند. به عنوان مثال، اگر از a|o استفاده کنیم، این الگو تمام کلمات حاوی یک کاراکتر یا کاراکتر o را پیدا می کند.
mytextfile.txt
mytextfile.txt
mytextfile.txt
مثال 11: یافتن تمام کلمات با تعداد مشخصی از کاراکترها
برای یافتن تمام کلمات با تعداد کاراکتر مشخص می توانیم از نقطه (.) استفاده کنیم. متاکاراکتر نقطه برای یافتن یک کاراکتر استفاده می شود اما می توان از آن برای جستجوی چندین کاراکتر نیز استفاده کرد. برای پیدا کردن تمام خطوط با چهار کاراکتر، از:
mytextfile.txt
mytextfile.txt
mytextfile.txt
مثال 12: یافتن آدرس IP از یک فایل آدرس IP یکی از موارد کلیدی است که می خواهید با استفاده از regex از یک فایل استخراج کنید. از آنجایی که یک آدرس IP حاوی نقاط است، یافتن آن با استفاده از regex یک عملیات ساده نیست: ما باید با استفاده از اسلش از نقطه (.) فرار کنیم. بیایید آدرس های IP را از آن استخراج کنیم /etc/hosts
فایل.
میزبان ها
.appendChild(e),p=e.querySelector(‘.play’),p.onclick=lazyLoadYoutubeIframe});
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-28 16:24:03