عبارات منظم Regular Expressions قسمت اول (آموزش لینوکس LPIC1-101)
عبارات منظم Regular Expressions قسمت اول (آموزش لینوکس LPIC1-101)
عبارات منظم (Regular Expressions)
عبارات منظم (Regular Expressions) نشانه هاي سیمبلیک هستند که به منظور شناسایی الگوها در متن استفاده می شوند.
از برخی جهات عبارات منظم شبیه wildcard های شل (Shell) هستند.
از چه نظر؟
از این نظر که آنها نیز فایل و نام مسیر را مطابقت می دهند ولی در مقیاسی بزرگتر.
عبارات منظم توسط بسیاري از ابزارهاي خط فرمان و همچنین بیشتر زبان هاي برنامه نویسی به منظور سهولت راهکارهاي دستکاري مشکلات متن پشتیبانی می شوند.
دستور grep – جستجو در میان متن
برنامه اصلی که ما از آن به منظور کار با عبارات منظم استفاده خواهیم کرد،
دوست قدیمی خودمان grep هست.
در واقع نام grep هم از عبارت global regular expression print به معنی (چاپ عبارت منظم سراسري) گرفته شده است.
در اصل grep فایل هاي متنی را براي وجود یک عبارت منظم جستجو کرده
و هر خطی که داراي عبارت منظم تعیین شده است را در استاندارد خروجی چاپ می کند.
تاکنون دستور grep را با رشته هاي معین استفاده می کردیم مثل زیر:
این دستور همه فایل هاي موجود در دایرکتوري usr/bin/ که شامل نام رشته zip هستند را لیست می کند.
دستور grep گزینه ها و آرگومان ها را به این صورت قبول می کند:
[…grep [options] regex[file
که در دستور بالا به جاي regex عبارت منظم را قرار می دهیم.
جدول زیر گزینه هاي رایج grep را لیست می کند:
به منظور توصیف کامل تر دستور grep چند فایل متنی براي جستجو ایجاد می کنیم:
می توانیم یک جستجوي ساده از لیست فایل ها را به این صورت نیز انجام دهیم:
در این مثال grep همه فایل هاي لیست شده را براي رشته gzip جستجو می کند
و یک مورد تطبیق را پیدا می کند که این مورد درون فایل grep-bin.txt است.
اگر بخواهیم بجاي لیست موارد تطبیق فقط فایل هاي مربوط را لیست کنیم، می توانیم از گزینه l- استفاده کنیم:
در مقابل، اگر بخواهیم یک لیست از فقط فایل هایی که با مورد ما مطابقت ندارند را ببینیم،
می توانیم از دستور زیر استفاده کنیم:
متاکاراکترها و لیترال ها (Metacharacters and Literals)
شاید مشخص نبود ولی جستجوهای grep ما از عبارات منظم استفاده می کردند.
اینها مثال هاي ساده اي بودند.
عبارت منظم gzip به صورتی عمل می کند که حداقل چهار کاراکتر i ,z ,g و p جایی درون یک خط به ترتیب ذکر شده و بدون هیچ کاراکتری در بین آنها پیدا شوند.
کاراکترهاي موجود در رشته gzip کاراکترهاي لیترال هستند، به این صورت که آنها با خودشان تطبیق داده می شوند.
علاوه بر کاراکترهاي لیترال، عبارات منظم ممکن است حاوي متاکاراکترها نیز باشند،
به این صورت که آنها را می توان به منظور مطابقت هاي پیچیده تر مورد استفاده قرار داد.
عبارات منظم متاکاراکتر شامل این موارد هستند: ^$ { } [ ] .-? ( ) + *|\ بقیه کاراکترهاي دیگر را کاراکترهاي لیترال (Literal) در نظر بگیرید.
هرچند کاراکتر بک اسلش (\) در برخی موارد براي ایجاد متاسکوئنکس ها استفاده می شود
و همچنین متاکاراکترها را قادر می سازد تا به عنوان کاراکترهاي لیترال رفتار کنند (به جاي اینکه به عنوان یک متاکاراکترها تفسیر شوند).
نکته:
همانطور که می ببینیم، بسیاري از عبارات منظم متاکاراکترها، کاراکترهایی هستند که در داخل شل (Shell) نیز معنی دار هستند
و به منظور اجراي برخی بسط ها به کار می روند.
زمانی که عبارات منظم حاوي متاکارکترها را در خط فرمان بکار می بریم، حتما بایستی براي جلوگیري از بسط آنها را داخل کوتیشن قرار دهیم.
کاراکتر همه (The Any Character)
اولین متاکاراکتري که آن را بررسی می کنیم، کاراکتر نقطه یا همان دات (.) هست که به منظور مطابقت همه کاراکترها استفاده می شود.
اگر آن را در یک عبارت منظم قرار دهیم، موجب تطبیق هر کاراکتري در آن موقعیت کاراکتري می شود.
یک مثال گویاي همه چیز است:
در این مثال ما به دنبال هر خطی در فایل هاي خود می گردیم که با عبارت منظم .zip مطابقت دارند.
چیزهاي جالبی در نتایج وجود دارد.
توجه کنید که برنامه zip پیدا نشد!
دلیل آن این است که قرار دادن متاکاراکتر نقطه در عبارت منظم، طول مورد نیاز براي مطابقت را به چهار کاراکتر افزایش می دهد.
و از آنجایی که zip فقط سه کاراکتر دارد مطابقت پیدا نمی کند.
همچنین اگر هر فایلی در لیست هاي ما داراي پسوند .zip باشد تطبیق داده می شود.
چرا؟
به این دلیل که کاراکتر نقطه ، در پسوند فایل نیز به عنوان کاراکتر همه (any) رفتار می کند.
آنچورها یا همان لنگرها (Anchors)
کاراکترهاي Concatenation (^) و دالر ($) کاراکترهایی هستند که در داخل عبارت منظم به عنوان یک لنگر رفتار می کنند.
این بدان معنی است که این مطابقت فقط زمانی رخ می دهد که عبارت منظم در ابتداي خط (^) و یا در آخر خط ($) پیدا شود.
در اینجا لیست فایل ها را براي رشته zip که در ابتداي خط و انتهاي خط به کار رفته و در هر دو موقعیت ابتدا و انتهاي خطوط به کار رفته است جستجو کردیم.
به نتایج دقت کنید و موقعیت رشته zip را مشاهده کنید.
جهت مشاهده دوره های آموزشی بر روی این لینک کلیک نمایید.
جدیدترین اخبار مجموعه فراز نتورک را در این صفحه اجتماعی دنبال کنید.
نویسنده: موسی رشوند
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.