از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش درک و اجرای عبارات منظم Bash
سرفصلهای مطلب
یک عبارت منظم برای اهداف مختلف در زبان های برنامه نویسی استفاده می شود. این یک الگوی رشته ای است که توسط انواع مختلفی از متا شخصیت ها و عبارات برای مطابقت یا جستجو و جایگزینی یک رشته در یک مقدار رشته یا محتوای یک پرونده ایجاد می شود. اهداف استفاده از متا شخصیت ها و عبارات مختلف که برای ایجاد الگوهای بیان منظم و برخی از کاربردهای بیان منظم در اسکریپت Bash استفاده می شود ، در این آموزش توضیح داده شده است.
فهرست مطالب:
- معرفی
- Regex برای تطبیق اعداد
- Regex برای رشته تطبیق
- Regex برای جستجو و جایگزینی رشته
- Regex برای جستجوی محتوا در فایل
- Regex برای تغییر محتوای یک فایل
- Regex برای اعتبارسنجی آدرس ایمیل
- Regex برای اعتبارسنجی شماره تلفن
- Regex برای اعتبارسنجی نام کاربری و رمز عبور
معرفی
برخی از شخصیت های خاص استفاده شده که در الگوی بیان منظم برای مطابقت یا جستجو و جایگزینی رشته استفاده می شوند در زیر ذکر شده است:
شخصیت | هدف |
. | برای جستجوی هر کاراکتری به جز خط جدید استفاده می شود. |
^ | برای جستجو در ابتدای متن استفاده می شود. |
$ | برای جستجو در انتهای متن استفاده می شود. |
\b | برای جستجوی یک کاراکتر بک اسپیس استفاده می شود. |
\n | برای جستجوی یک کاراکتر خط جدید استفاده می شود. |
\ t | برای جستجوی یک کاراکتر برگه استفاده می شود. |
\r | برای جستجوی کاراکتر بازگشت کالسکه استفاده می شود. |
\d | برای جستجوی کاراکتر رقمی استفاده می شود. |
\ D | برای جستجوی کاراکتر غیر رقمی استفاده می شود. |
\s | برای جستجوی کاراکتر فضای خالی استفاده می شود. |
\S | برای جستجوی کاراکتر بدون فضای سفید استفاده می شود. |
برخی از الگوهای عبارات معمولی که برای جستجوی انواع مختلف دامنه کاراکترها استفاده می شوند در زیر ذکر شده اند:
دامنه | هدف |
[a-z] | برای جستجوی تمام حروف الفبای کوچک استفاده می شود. |
[A-Z] | برای جستجوی تمام حروف الفبای بزرگ استفاده می شود. |
[0-9] | برای جستجوی تمام کاراکترهای عددی استفاده می شود. |
[a-zA-Z] | برای جستجوی تمام حروف الفبا استفاده می شود. |
[0-9a-zA-Z] | برای جستجوی تمام کاراکترهای الفبایی استفاده می شود. |
[^A-Z] | برای جستجوی همه کاراکترها به جز کاراکترهای بزرگ استفاده می شود. |
[^0-9] | برای جستجوی همه کاراکترها به جز کاراکترهای عددی استفاده می شود. |
Regex برای تطبیق اعداد
استفاده از [0-9] عبارت در اسکریپت زیر نشان داده شده است تا بررسی شود که آیا مقدار ورودی یک عدد است یا خیر. اگر ورودی که از کاربر گرفته می شود یک عدد باشد، مقدار موفقیت چاپ می شود. در غیر این صورت پیغام خطا چاپ می شود.
#از کاربر ورودی بگیرید
خواندن -پ “سن خود را وارد کنید: “ سن
#بررسی کنید که آیا مقدار ورودی معتبر است یا نامعتبر
اگر [[ $age =~ [0–9] ]]; سپس
#پیام را برای داده های معتبر چاپ کنید
echo “سن دلار ارزش سنی معتبر است.”
دیگر
#چاپ پیام برای داده های نامعتبر
echo “مقدار ورودی باید یک عدد باشد.”
فی
خروجی زیر پس از اجرای اسکریپت با مقدار ورودی 70 ظاهر می شود:
خروجی زیر پس از اجرای اسکریپت با مقدار ورودی “test” ظاهر می شود:
Regex برای رشته تطبیق
استفاده از [a-zA-Z] عبارت در اسکریپت زیر نشان داده شده است تا بررسی شود که آیا مقدار ورودی شامل همه کاراکترهای الفبا است یا خیر. اگر ورودی که از کاربر گرفته می شود شامل تمام نویسه های الفبایی باشد، یک مقدار موفقیت چاپ می شود. در غیر این صورت پیغام خطا چاپ می شود.
#از کاربر ورودی بگیرید
خواندن -پ “نام کتاب را وارد کنید:” bname
#بررسی کنید که آیا مقدار ورودی معتبر است یا نامعتبر
اگر [[ $bname =~ [a-zA-z] ]]
سپس
#پیام را برای داده های معتبر چاپ کنید
echo “$bname داده معتبر است.”
دیگر
#پیام را برای داده های نامعتبر چاپ کنید
echo “مقدار ورودی باید یک رشته باشد.”
فی
خروجی زیر پس از اجرای اسکریپت با مقدار “Shell Programming” ظاهر می شود:
خروجی زیر پس از اجرای اسکریپت با مقدار 230 ظاهر می شود:
Regex برای جستجو و جایگزینی رشته
اسکریپت زیر استفاده از الگوی عبارت منظم را برای جستجو و جایگزینی بخش خاصی از مقدار رشته نشان می دهد. یک مقدار رشته از کاربر گرفته می شود. اگر رشته ورودی دارای هر کاراکتری از “a” تا “m” باشد، آن کاراکترها با کاراکتر “_” جایگزین می شوند. “/[a-m]الگوی /” در اسکریپت برای جستجوی کاراکترها استفاده می شود. سپس، هر دو رشته اصلی و رشته جایگزین در خروجی چاپ می شوند.
#از کاربر ورودی بگیرید
خواندن -پ “یک مقدار رشته را وارد کنید:” خ
#رشته را تغییر دهید روی الگو
modified_Str=${Str//[a-m]/_}
#مقدار رشته اصلی را چاپ کنید
echo «رشته اصلی است $Str“
#مقدار رشته جایگزین شده را چاپ کنید
echo “رشته اصلاح شده است $modified_Str“
خروجی زیر پس از اجرای اسکریپت با مقدار ورودی “hello” ظاهر می شود. در اینجا، چهار کاراکتر از مقدار رشته با کاراکتر “_” جایگزین می شود. رشته جایگزین شده “____o” است:
خروجی زیر پس از اجرای اسکریپت با مقدار ورودی Zoo ظاهر می شود. هیچ کاراکتر منطبقی در مقدار ورودی یافت نشد. بنابراین، رشته اصلی اصلاح نشده است:
Regex برای جستجوی محتوا در فایل
قبل از بررسی اسکریپت این مثال، یک فایل متنی با نام “products.txt” با محتوای زیر ایجاد کنید.
products.txt
1090 نظارت کنید 50
2378 موش 10
4521 چاپگر 100
5682 صفحه کلید 25
دستور grep یکی از گزینههای جستجوی رشته خاصی در فایل در Bash است terminal. دستور “grep” زیر آن خطوطی از فایل “products.txt” را که با “00” ختم می شود، جستجو می کند.
خروجی زیر پس از اجرای دستور grep ظاهر می شود. یک خط در فایل وجود دارد که با الگو مطابقت دارد و آن خط در خروجی چاپ می شود:
روش جستجوی خطوط خاص از یک فایل با استفاده از یک عبارت منظم در اسکریپت Bash در اسکریپت زیر نشان داده شده است. نام فایل از command-line مقدار آرگومان و محتوای فایل با استفاده از حلقه “while” خوانده می شود اگر هر خطی حاوی هر کاراکتری از “L” تا “M” باشد. سپس، آن خط در خروجی چاپ می شود.
#فایل را خط به خط بخوانید
در حالی که خواندن -r خط
انجام دادن
#جستجوی خطوط حاوی کاراکترهای بین ‘L’ تا ‘M’
اگر [[ $line =~ [L-M] ]]
سپس
#خط مطابق را چاپ کنید
echo خط $
فی
#فایلی که در آرگومان اول ارسال شده است را بخوانید
انجام شده < 1 دلار
خروجی زیر پس از اجرای اسکریپت با مقدار آرگومان فایل “products.txt” ظاهر می شود. این فایل شامل دو خط منطبق با الگو است:
Regex برای تغییر محتوای یک فایل
چندین دستور Bash در Bash برای جستجو و جایگزینی محتوای یک فایل وجود دارد. دستور “sed” یکی از آنهاست. اسکریپت زیر نام فایل را از command-line بحث و جدل. رشته «جستجو» و رشته «جایگزین» از کاربر گرفته شده است. اگر مقادیر ورودی خالی نباشد و نام فایلی که به عنوان ارسال می شود command-line مقدار آرگومان شامل هر رشته ای است که با کلمه جستجو مطابقت دارد، رشته مطابق با رشته “replace” جایگزین می شود. دستور “sed” با گزینه “-i” و الگوهای جستجو و جایگزینی در اسکریپت برای تغییر محتوای فایل استفاده می شود.
#نام فایل را بخوانید
نام فایل=1 دلار
#رشته را برای جستجو بردارید
خواندن -پ “رشته جستجو را وارد کنید:” src
#رشته را برای تعویض بردارید
خواندن -پ “رشته جایگزین را وارد کنید:” هرزه
اگر [[ ! -z $src && ! -z $rep ]];
سپس
#جستجو کنید و رشته را در فایل جایگزین کنید
sed -من “s/$src/$rep/” $filename
فی
برای بررسی محتوای فایل “products.txt” دستور زیر را اجرا کنید. با توجه به خروجی، فایل شامل پنج خط است:
دستور زیر را برای اجرای اسکریپت با دادن فایل “products.txt” به عنوان اولین فایل اجرا کنید command-line استدلالی که قبلا ایجاد شده بود. با توجه به خروجی، “صفحه کلید” به عنوان رشته جستجو و “اسکنر” به عنوان رشته جایگزین در نظر گرفته می شود. رشته «جستجو» در فایل «products.txt» وجود دارد. بنابراین، محتوای فایل تغییر خواهد کرد.
سپس، دستور قبلی «cat» را دوباره اجرا کنید تا محتوای فایل «products.txt» را بررسی کنید. با توجه به خروجی، کلمه “صفحه کلید” با کلمه “اسکنر” جایگزین می شود.
Regex برای اعتبارسنجی آدرس ایمیل
یکی از اهداف اصلی استفاده از عبارات منظم، اعتبارسنجی داده ها است. استفاده های بسیار ساده از الگوهای بیان منظم در مثال های قبلی نشان داده شده است. پیچیدگی الگو بر اساس افزایش خواهد یافت روی نوع اعتبار سنجی برای تأیید اعتبار یک آدرس ایمیل باید یک الگوی عبارت منظم طولانی بنویسید. اسکریپت زیر روش اعتبارسنجی یک آدرس ایمیل را با استفاده از یک الگوی عبارت منظم نشان می دهد. یک آدرس ایمیل شامل چندین بخش است. قسمت اول شامل نام کاربری است که ممکن است شامل هر کاراکتر الفبایی، نقطه (.)، زیر خط (_) و خط فاصله (-) باشد. بعد، “@” در ایمیل استفاده می شود. قسمت آخر ایمیل حاوی نام دامنه است که می تواند به دو تا چهار کاراکتر ختم شود. طبق اسکریپت ، یک آدرس ایمیل از کاربر گرفته می شود و ایمیل معتبر یا نامعتبر است و توسط یک الگوی بیان منظم بررسی می شود.
#از کاربر آدرس ایمیل بگیرید
خواندن -پ “آدرس ایمیل خود را وارد کنید:” ما
#بررسی کنید که آیا آدرس ایمیل معتبر است یا نامعتبر
اگر [[ “$em“ =~ ^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2،4}$ ]]
سپس
#پیام را برای آدرس ایمیل معتبر چاپ کنید
printf “%s یک آدرس ایمیل معتبر است.\n“ $em
دیگر
#پیام را برای آدرس ایمیل نامعتبر چاپ کنید
printf “%s یک آدرس ایمیل نامعتبر است.\n“ $em
فی
خروجی زیر نشان می دهد که “admin@tech.com.bd” یک آدرس ایمیل معتبر است زیرا بیانیه “if” در صورت مطابقت با الگوی بیان منظم داده شده صحیح است:
خروجی زیر نشان می دهد که “admin@example.abcde” یک آدرس ایمیل نامعتبر است زیرا بیانیه “if” هنگام مطابقت با الگوی بیان منظم داده شده نادرست است:
Regex برای اعتبارسنجی شماره تلفن
روش اعتبارسنجی شماره تلفن با فرمت “880-XXX-XXX-XXXX” با استفاده از یک عبارت معمولی در اسکریپت زیر نشان داده شده است. در اینجا، “X” هر رقمی را نشان می دهد. شماره تلفن از کاربر گرفته شده است. طبق اسکریپت ، یک شماره تلفن از کاربر گرفته می شود و شماره تلفن معتبر یا نامعتبر است و توسط یک الگوی بیان منظم بررسی می شود.
#از کاربر شماره تلفن بگیرید
خواندن -پ “شماره تلفن خود را وارد کنید: “ تلفن
#بررسی کنید شماره تلفن معتبر است یا نامعتبر
اگر [[ “$phone“ =~ ^880–[0–9]{3}\-[0–9]{3}\-[0–9]{4}$ ]]
سپس
#پیام شماره تلفن معتبر را چاپ کنید
printf “%s یک شماره تلفن معتبر است.\n“ تلفن $
دیگر
#پیام شماره تلفن نامعتبر را چاپ کنید
printf “%s یک شماره تلفن نامعتبر است.\n“ تلفن $
فی
خروجی زیر نشان می دهد که “880-169-345-7840” یک شماره تلفن معتبر است زیرا شماره تلفن ورودی با الگوی بیان منظم مطابقت دارد:
خروجی زیر نشان می دهد که “880-176-6789-89” یک شماره تلفن نامعتبر است زیرا شماره تلفن ورودی با الگوی بیان منظم مطابقت ندارد:
Regex برای اعتبارسنجی نام کاربری و رمز عبور
روش اعتبارسنجی مقادیر نام کاربری و رمز عبور در اسکریپت زیر نشان داده شده است. طبق اسکریپت ، نام کاربری ممکن است حاوی حروف و ارقام کوچک باشد و طول نام کاربری باید 6 تا 10 کاراکتر باشد. رمز عبور ممکن است شامل هر شخصیت الفبایی ، “$” ، “#” ، “@” ، “_” و “-” فقط شخصیت ها باشد و طول رمز عبور باید 5 تا 8 کاراکتر باشد.
#نام کاربری و رمز عبور را بگیرید
خواندن -پ “نام کاربری را وارد کنید: “ un
خواندن -پ “نام کاربری را وارد کنید: “ pw
#بررسی کنید که آیا نام کاربری و رمز عبور معتبر است یا نامعتبر
اگر [[ “$un“ =~ [a-z0-9]{6،10} && “$ pw“ =~ [a-zA-Z0-9#$@_-]{5,8} ]
سپس
وقتی هر دو مقدار ورودی معتبر هستند، پیامی را چاپ کنید
echo “نام کاربری و رمز عبور معتبر است.”
دیگر
اگر هر یک از مقادیر ورودی نامعتبر است، پیامی را چاپ کنید
echo “نام کاربری یا رمز عبور نامعتبر است.”
فی
خروجی زیر پس از اجرای اسکریپت با مقادیر ورودی “Fahmida19” به عنوان نام کاربری و “سلام@123” به عنوان رمز عبور ظاهر می شود:
نتیجه
استفاده های مختلف از الگوهای عبارت منظم در این آموزش با استفاده از دستورات و اسکریپت های متعدد Bash نشان داده شده است. روشهای جستجو، جایگزینی و اعتبارسنجی دادهها با استفاده از الگوهای بیان منظم ساده تا پیچیده در اینجا نشان داده شدهاند.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1403-01-06 07:33:04