مثال استفاده از فرمان لینوکس grep

معرفی

فرمان لینوکس grep به عنوان یک روش برای فیلتر کردن ورودی استفاده می شود.

GREP به معنای عبارات منظم جهانی است و بنابراین برای استفاده از آن به طور موثر، شما باید برخی از عبارات منظم داشته باشید.

در این مقاله، من قصد دارم به شما تعدادی از نمونه هایی را که به شما در درک دستورات grep کمک می کند، نشان دهید.

01 از 09

چگونه می توان برای یک رشته در یک فایل با استفاده از GREP جستجو کرد

فرمان لینوکس grep.

تصور کنید که یک فایل متنی به نام کتاب ها با عناوین کتاب های کودکان زیر داشته باشید:

برای پیدا کردن همه کتاب ها با کلمه "The" در عنوان شما از نحو زیر استفاده می کنید:

grep کتاب ها

نتایج زیر بازمی گردد:

در هر مورد، کلمه "The" نمایش داده خواهد شد.

توجه داشته باشید که جستجو حس حساسی است، بنابراین اگر یکی از عناوین به جای "The" به جای "آن" باشد، پس از آن بازگشت نخواهد شد.

برای نادیده گرفتن مورد شما میتوانید سوئیچ زیر را اضافه کنید:

کتاب ها را بیاموزید

شما همچنین می توانید از کلید -i به صورت زیر استفاده کنید:

grep -i کتاب ها

02 از 09

جستجو برای یک رشته در یک فایل با استفاده از wildcards

فرمان grep بسیار قدرتمند است. شما می توانید بسیاری از تکنیک های تطبیق الگو را برای فیلتر کردن نتایج استفاده کنید.

در این مثال، به شما نشان خواهم داد که چگونه یک رشته را در یک فایل با استفاده از wildcards جستجو کنید .

تصور کنید که یک فایل به نام مکان هایی با نام مکان های اسکاتلندی زیر دارید:

ابردین

aberystwyth

aberlour

غریبه

اوورنس

نیوبرگ

گوزن جدید

گالووی جدید

glasgow

ادینبورگ

اگر میخواهید همه مکانهایی را پیدا کنید که در نام دارند، از نحو زیر استفاده کنید:

grep inver * مکان ها

علامت ستاره ستاره (*) برای 0 یا تعداد زیادی است. بنابراین اگر شما محل مکانی به نام inver یا مکانی به نام inverness نامیده باشید، هر دو می توانند بازگردانده شوند.

علامت دیگری که می توانید استفاده کنید دوره (.) است. شما می توانید از این برای مطابقت با یک نامه استفاده کنید.

grep inver.r مکان ها

دستور بالا مکان هایی را به نام inverurie و inverary پیدا می کند اما invereerie را پیدا نمی کند، زیرا فقط می تواند یک علامت میان دو رشته وجود داشته باشد، همانطور که در یک دوره واحد مشخص می شود.

واژگان دوره ای مفید است، اما اگر بخشی از متن مورد نظر شما را داشته باشید، می توانید مشکلات ایجاد کنید.

به عنوان مثال به این لیست از نام دامنه نگاه کنید

برای پیدا کردن همه about.coms شما فقط می توانید با استفاده از نحو زیر جستجو کنید:

grep * درباره * domainnames

دستورالعمل بالا در صورت لزوم نام زیر در آن وجود دارد:

بنابراین می توانید از نحو زیر استفاده کنید:

grep * about.com domainnames

این کار خوب است مگر اینکه یک دامنه با نام زیر داشته باشد:

aboutycom.com

برای واقعا جستجو برای مدت term about.com شما نیاز به فرار از نقطه به شرح زیر است:

grep * about \ .com domainnames

علامت نهایی برای نشان دادن شما علامت سوال است که برای صفر یا یک شخصیت است.

مثلا:

grep؟ ber نام های کاربری

فرمان فوق به ابردین، aberystwyth یا حتی berwick بازگشت.

03 از 09

جستجو برای رشته ها در آغاز و پایان خط با استفاده از grep

نماد (^) و دلار ($) به شما امکان می دهد الگوهای ابتدایی و انتهای خط را جستجو کنید.

تصور کنید که یک فایل با نام فوتبال به نام فوتبال داشته باشید:

اگر می خواهید تمام تیم هایی را که از منچستر شروع شده اند پیدا کنید، از نحو زیر استفاده می کنید:

grep ^ تیم های منچستر

فرماندهی فوق منچستر سیتی و منچستر یونایتد، اما منچستر یونایتد نیست.

همچنین شما می توانید تمام تیم هایی را که با یونایتد به پایان رسیده اند را با استفاده از نحوه زیر پیدا کنید:

grep United teams teams

فرماندهی فوق منچستر یونایتد و نیوکاسل یونایتد را برگردانده اما منچستر یونایتد نیست.

04 از 09

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

اگر نمیخواهید خطوط واقعی که الگو را با استفاده از grep مطابقت میدهند باز گردند اما فقط می خواهید بدانید که تعداد زیادی از آنها وجود دارد شما می توانید از نحو زیر استفاده کنید:

grep -c inputfile الگو

اگر الگوی با دو بار همگام سازی شود، شماره 2 برگشت می یابد.

05 از 09

پیدا کردن همه شرایطی که با grep مطابقت ندارند

تصور کنید که فهرستی از نام مکان را با کشورهای ذکر شده به شرح زیر میبینید:

شما ممکن است متوجه شده باشید که خلیج کلوین هیچ کشوری را با آن در ارتباط نیست.

برای جستجوی همه مکان ها با کشوری می توانید از نحو زیر استفاده کنید:

grep زمین $ مکان

نتایج به دست آمده در همه مکان ها به جز خلیج کلوین می باشد.

این بدیهی است که فقط برای مکان هایی که در زمین به پایان می رسد (به سختی علمی) کار می کند.

شما می توانید انتخاب کنید با استفاده از نحو زیر:

grep -v زمین $ مکان

این همه مکان هایی را که با زمین به پایان نرسید پیدا نمی کنند.

06 از 09

نحوه یافتن خطوط خالی در فایل ها با استفاده از grep

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

هنگامی که برنامه به خط بعد از لیورپول برسد، خواندن معنی آن را متوقف نخواهد کرد، به همین دلیل کلوین خلیج کاملا از دست رفته است.

شما می توانید از grep برای جستجوی خطوط خالی با نحو زیر استفاده کنید:

grep ^ $ مکان ها

متاسفانه این خصوصا مفید نیست زیرا فقط خطوط خالی را باز می کند.

البته می توانید تعداد خطوط خالی را به صورت چک کنید تا ببینید آیا فایل به شرح زیر است:

grep -c ^ $ مکان ها

با این وجود، مفیدتر است بدانیم که شماره خطوط دارای یک خط خالی است تا شما بتوانید آنها را جایگزین کنید. شما می توانید این کار را با دستور زیر انجام دهید:

grep -n ^ $ مکان ها

07 از 09

چگونه برای رشته های عددی بزرگ یا عددی کوچک با استفاده از grep جستجو کنید

با استفاده از grep شما می توانید تعیین کنید که کدام خطوط در یک پرونده دارای کاراکترهای بزرگ با استفاده از نحو زیر است:

grep '[AZ]' نام فایل

براکت های مربع [] اجازه می دهد تا شما از طیف وسیعی از کاراکتر ها استفاده کنید. در مثال فوق، هر شخصیتی بین A و Z مطابقت دارد.

بنابراین برای مطابقت با کاراکترهای کوچک، می توانید از نحو زیر استفاده کنید:

grep '[az]' نام فایل

اگر می خواهید فقط حروف و عددی یا سایر نمادها را مطابقت دهید، می توانید از نحو زیر استفاده کنید:

grep '[a-zA-Z]' نام فایل

شما می توانید همین کار را با شماره های زیر انجام دهید:

grep '[0-9]' نام فایل

08 از 09

به دنبال الگوهای تکراری با استفاده از grep

شما می توانید براکت یک الگوی تکرار استفاده کنید.

تصور کنید که یک فایل با شماره تلفن به صورت زیر است:

شما می دانید قسمت اول این شماره باید سه رقمی باشد و شما می خواهید خطوطی را پیدا کنید که با این الگو مطابقت نداشته باشند.

از مثال قبلی شما می دانید که [0-9] همه اعداد را در یک فایل می گیرد.

در این مثال، ما می خواهیم خطوطی که با سه عدد شروع می شود و سپس یک خط (-) می شود. شما می توانید این کار را با نحو زیر انجام دهید:

grep "^ [0-9] [0-9] [0-9] -" اعداد

همانطور که از مثالهای قبلی می دانیم، carat (^) به این معنی است که خط باید با الگوی زیر شروع شود.

[0-9] هر عددی بین 0 و 9 را جستجو می کند. همانطور که این سه مرتبه آن را 3 عدد نشان می دهد. در نهایت، یک خط وجود دارد که نشان می دهد که یک خط فاصله باید سه عدد را به دست آورد.

با استفاده از براکت های پیچیده می توانید جستجو را کوچکتر به صورت زیر انجام دهید:

grep "^ [0-9] \ {3 \} -" اعداد

اسلش از {براکت به عنوان بخشی از عبارات منظم کار می کند اما اساسا آنچه که گفته می شود، [0-9] {3} است که به معنی هر عدد بین 0 و 9 سه بار است.

براکت های curly نیز می توانند به صورت زیر استفاده شوند:

{5،10}

{5،}

{5،10} بدین معنی است که شخصیتی که برای جستجو جستجو می شود باید حداقل 5 بار تکرار شود، اما نه بیش از 10، در حالی که {5،} به این معنی است که شخصیت باید حداقل 5 بار تکرار شود، اما می تواند بیشتر از آن باشد.

09 از 09

استفاده از خروجی از دستورات دیگر با استفاده از grep

تا کنون ما در تطبیق الگو در فایلهای فردی مورد بررسی قرار گرفته ایم اما grep می تواند خروجی را از دستورات دیگر به عنوان ورودی برای تطابق الگو استفاده کند.

مثال خوبی از این استفاده از دستور ps است که پروسه های فعال را فهرست می کند.

برای مثال دستور زیر را اجرا کنید:

ps -ef

تمام پروسه های در حال اجرا در سیستم شما نمایش داده می شود.

شما می توانید از grep برای جستجوی یک پروسه در حال اجرا خاص به صورت زیر استفاده کنید:

ps -ef | grep فایرفاکس

خلاصه

فرمان grep یک فرمان لینوکس اساسی است و این یکی است که ارزش یادگیری را دارد، زیرا هنگام جستجو در فایل ها و پردازش ها هنگام استفاده از ترمینال، زندگی شما بسیار ساده تر می شود.