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

سرور مجازی NVMe

یافتن رشته ها در فایل های متنی با استفاده از grep با عبارت منظم

0 6
زمان لازم برای مطالعه: 5 دقیقه


grep یکی از محبوب ترین ابزارها برای جستجو و یافتن رشته ها در یک فایل متنی است. نام grep از دستوری در ابزار ویرایشگر خط Unix ed که اکنون منسوخ شده است – فرمان ed برای جستجو گرفته شده است. در سطح جهانی از طریق یک فایل برای a عبارت منظم و سپس چاپ آن خطوط بود g/re/p، جایی که re عبارت منظمی بود که استفاده می کردید. در نهایت دستور grep برای انجام این جستجو نوشته شد روی یک فایل در صورت عدم استفاده از ed.

در این مقاله، ما به شما نشان می‌دهیم که جستجوی رشته‌ای پیش‌رفته را با استفاده از Grep با عبارت منظم با دادن 10 دست انجام دهید.روی مثال ها روی پیاده سازی های آن بسیاری از مثال‌های مورد بحث در این مقاله مفاهیم کاربردی دارند، به این معنی که می‌توانید از آنها در برنامه‌نویسی روزانه لینوکس خود استفاده کنید. نمونه‌های زیر برخی از نمونه‌های regexp را برای الگوهایی که معمولاً جستجو می‌شوند، توضیح می‌دهند.

مثال 1: یک منشور منفرد را در یک فایل متنی پیدا کنید

برای خروجی خطوطی در فایل ‘book’ که حاوی نویسه ‘$’ هستند، تایپ کنید:

$ grep کتاب ‘\$’

مثال 2: یک رشته واحد را در یک فایل متنی پیدا کنید

برای خروجی خطوط در فایل “book” که حاوی رشته “$14.99” است، تایپ کنید:

$ grep ‘\1 دلار4کتاب \.99

مثال 3: یک منشور خاص در یک فایل متنی پیدا کنید

برای خروجی خطوطی در فایل ‘book’ که حاوی کاراکتر ‘\’ هستند، تایپ کنید:

$ grep ‘\\’ کتاب

مثال 4: تطبیق خطوطی که با متن خاصی شروع می شوند

از «ˆ» در یک regexp برای نشان دادن ابتدای یک خط استفاده کنید.

برای خروجی تمام خطوط در ‘/usr/dict/words’ که با ‘pro’ شروع می شود، تایپ کنید:

$ grep ‘حرفه ای’ /usr/دیکته/کلمات

برای خروجی تمام خطوط در فایل “book” که با متن “در ابتدا” شروع می شود، صرف نظر از حروف کوچک، تایپ کنید:

$ grep -من ‘ˆکه در کتاب آغاز

توجه داشته باشید: این رجیکس‌ها با نویسه‌ها نقل‌قول شدند. این به این دلیل است که برخی از پوسته ها در غیر این صورت با کاراکتر ‘ˆ’ به عنوان یک “متاکاکتر” خاص برخورد می کنند.

پیشنهاد می‌کنیم بخوانید:  Bash یک آرایه خالی را اعلام می کند؟

علاوه بر جستجوی کلمات و عبارات، می توانید از grep برای جستجوی الگوهای متنی پیچیده به نام عبارات منظم استفاده کنید. یک عبارت منظم – یا “regexp” – یک رشته متنی از کاراکترهای خاص است که a را مشخص می کند تنظیم از الگوهای مطابقت

از نظر فنی، الگوهای کلمات یا عبارت‌ها عباراتی منظم هستند – فقط موارد بسیار ساده. در یک عبارت منظم، اکثر کاراکترها – از جمله حروف و اعداد – خود را نشان می دهند. برای مثال الگوی regexp 1 با رشته “1” و الگو مطابقت دارد پسر با رشته “پسر” مطابقت دارد.

تعدادی کاراکتر رزرو شده به نام متاکاراکتر وجود دارد که خود را در یک عبارت منظم نشان نمی دهند، اما معنای خاصی دارند که برای ساختن الگوهای پیچیده استفاده می شود. این متا کاراکترها به شرح زیر است: .، *، [, ]، ˆ، $، و \. خوب است توجه داشته باشید که چنین متا کاراکترهایی تقریباً در بین همه رایج است مشترک و خاص توزیع های لینوکس اینجا مقاله خوبی است که معانی خاصی از متاکاراکترها را پوشش می دهد و نمونه هایی از کاربرد آنها را ارائه می دهد.

مثال 5: تطبیق خطوطی که به متن خاصی ختم می شوند

از «$» به‌عنوان آخرین کاراکتر متن نقل‌شده برای مطابقت با آن متن فقط در انتهای یک خط استفاده کنید. برای خروجی خطوط در فایل “going” که با علامت تعجب ختم می شود، تایپ کنید:

$ grep!$’ رفتن

مثال 6: تطبیق خطوط با طول معین

برای تطبیق خطوط با طول خاص، از آن تعداد «.» استفاده کنید. کاراکترهای بین ‘ˆ’ و ‘$’—به عنوان مثال، برای مطابقت با تمام خطوطی که دو نویسه (یا ستون) عرض دارند، از ‘ˆ..$’ به عنوان regexp برای جستجو استفاده کنید.

برای خروجی تمام خطوط در ‘/usr/dict/words’ که دقیقاً سه کاراکتر عرض دارند، تایپ کنید:

$ grep ‘ˆ…$’ /usr/دیکته/کلمات

برای خطوط طولانی تر، استفاده از ساختار متفاوت مفیدتر است: ‘ˆ.\{number\}$’، که در آن عدد تعداد خطوطی است که باید مطابقت داشته باشند. برای تعیین محدوده ای از اعداد از «» استفاده کنید.

برای خروجی تمام خطوط در ‘/usr/dict/words’ که دقیقاً دوازده کاراکتر عرض دارند، تایپ کنید:

$ grep ‘ˆ.\{12\}$’ /usr/دیکته/کلمات

برای خروجی تمام خطوط در ‘/usr/dict/words’ که عرض آنها بیست و دو یا بیشتر است، تایپ کنید:

$ grep ‘ˆ.\{22،\}$’ /usr/دیکته/کلمات

مثال 7: خطوط منطبق که حاوی هر یک از Regexps هستند

برای مطابقت دادن خطوطی که حاوی هر یک از تعدادی regexps هستند، هر یک از regexps را برای جستجوی بین عملگرهای متناوب (‘\|’) به عنوان regexp برای جستجو مشخص کنید. خطوط حاوی هر یک از regex های داده شده خروجی خواهند شد.

برای خروجی تمام خطوط در «playboy» که شامل الگوهای «کتاب» یا «کیک» هستند، تایپ کنید:

$ grep ‘کتاب\|کیک پلی بوی

مثال 8: خطوط منطبق که حاوی همه برخی از Regexps هستند

برای خروجی خطوطی که مطابقت دارند همه از تعدادی regexps، از grep برای خروجی خطوط حاوی اولین regexp که می‌خواهید مطابقت داشته باشد، استفاده کنید و خروجی را با regexp دوم به عنوان آرگومان به یک grep لوله کنید. به افزودن لوله‌ها به جستجوهای grep برای همه regex‌هایی که می‌خواهید جستجو کنید، ادامه دهید.

پیشنهاد می‌کنیم بخوانید:  یک عنصر خاص را از یک آرایه در Bash حذف کنید

برای خروجی تمام خطوط در «لیست پخش» که شامل هر دو الگوی «ساحل» و «آسمان» است، صرف نظر از حروف، تایپ کنید:

$ grep -من لیست پخش “ساحل”. | grep -من آسمان

مثال 9: خطوط منطبق که فقط شامل کاراکترهای خاصی هستند

برای مطابقت دادن خطوطی که فقط شامل کاراکترهای خاصی هستند، از regexp ‘ˆ استفاده کنید[characters]*$’، که در آن کاراکترها آنهایی هستند که باید مطابقت داشته باشند. برای خروجی خطوط در ‘/usr/dict/words’ که فقط دارای حروف صدادار هستند، تایپ کنید:

$ grep -من ‘ˆ[aeiou]*$’ /usr/دیکته/کلمات

گزینه ‘-i’ با کاراکترها بدون در نظر گرفتن حروف مورد منطبق است. بنابراین، در این مثال، تمام حروف صدادار بدون توجه به حروف با هم مطابقت دارند.

مثال 10: یافتن عبارات بدون توجه به فاصله

یکی از راه‌های جستجوی عبارتی که ممکن است با فاصله‌های اضافی بین کلمات، یا در سراسر یک خط یا page break، حذف تمام خطوط و فضاهای اضافی از ورودی، و سپس گرفتن آن است. برای انجام این کار، ورودی را به tr با ”\r\n:\>\|-” به عنوان آرگومان برای گزینه ‘-d’ وارد کنید (حذف تمام خطوط شکست از ورودی). آن را با گزینه ‘-u’ به فیلتر fmt وارد کنید (خروجی متن با فاصله یکنواخت). و آن را برای grep با الگوی جستجو لوله کنید.

برای جستجوی رشته «هم‌زمان با» در میان شکسته‌های خط در فایل «docs»، تایپ کنید:

$ گربه اسناد | tr \r\n:\>\|

-‘ | fmt -u | grep در عین حال زمان مانند

خلاصه

در این مقاله 10 مثال کاربردی از استفاده از دستور Grep Linux برای جستجو و یافتن رشته ها در یک فایل متنی را بررسی کردیم. در طول راه، ما یاد گرفتیم که چگونه از عبارات منظم در ارتباط با Grep برای انجام جستجوهای پیچیده استفاده کنیم روی فایل های متنی در حال حاضر شما ایده بهتری دارید روی عملکردهای جستجوی لینوکس چقدر قدرتمند هستند.

در اینجا منابع اضافی برای کسانی که علاقه مند به یادگیری بیشتر در مورد برنامه نویسی لینوکس هستند وجود دارد:

منابع برای مدیران سیستم

منابع برای برنامه نویسان هسته لینوکس

فرهنگ لغت سیستم فایل لینوکس

بررسی جامع روش عملکرد سیستم فایل و دایرکتوری لینوکس

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

زمان انتشار: 1402-12-31 16:12:05

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

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

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