آشنایی با دستور Grep در لینوکس
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 5 دقیقه

آشنایی با دستور Grep در لینوکس

در دنیای سیستم‌ عامل‌های یونیکس و لینوکس، اصطلاح Grep که مخفف Global Regular Expression Print دستوری‌ست که از اهمیت بسیار بالایی برخوردار است. اصلی‌ترین کاری که این دستور انجام می‌دهد انجام عملیات جستجو و تطبیق دادن رشته‌ها در فایل‌های متنی با استناد به عبارات با قاعده یا همان Regular Expressions است. Grep به صورت پیشفرض روی تمام توزیع‌های لینوکس نصب شده و از این جهت نیازی به نصب کردن آن نیست. تنها باید آن را فراخوانی کرده و از آن استفاده کنید. از این جهت در این مطلب قصد داریم به استفاده‌های کلی این دستور بپردازیم و در خلال این کار از چندین مثال نیز استفاده کنیم.

دستور Grep در لینوکس

دستور grep زمانی استفاده می‌شود که ما قصد پیدا کردن موقعیت یا جستجو یک عبارت باقاعده یا یک رشته را در یک فایل متنی داشته باشیم. برای اینکه به صورت واضح‌تری متوجه قضیه شویم بیایید یک فایل متنی جدید با نام “Welcome.txt” ایجاد کنیم و متن زیر را در آن قرار دهیم.

حال ما آماده‌ایم تا دستورات Grep را روی این فایل اجرا کنیم و خروجی مورد نظرمان را دریافت کنیم. برای آنکه یک رشته یا متن مشخص را در فایل متنی جستجو کنیم از سینتکس زیر استفاده خواهیم کرد.

$ grep "string" file name

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

$ filename grep "string"

برای مثال:

$ grep "Linux" welcome.txt

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

همانطور که مشاهده می‌کنید، دستور grep نه تنها رشته “Linux” را به شما نمایش می‌دهد بلکه خط‌هایی که شامل این رشته می‌شوند را نیز به شما نشان می‌دهد. اگر فایل متنی شما در یک مکان یا آدرس دیگر قرار دارد به یاد داشته باشید که آدرس آن را در داخل دستور grep درج کنید. برای مثال:

$ grep "string" /path/to/file

استفاده از دستور Grep برای خروجی معکوس

برای اینکه Grep به صورت معکوس، خروجی را به ما ارائه بدهد می‌توانیم از فلگ -v استفاده کنیم. خاصیت -v باعث می‌شود تا grep تمام خطوطی که عبارت جستجو شده در آن وجود ندارد را به ما نشان دهد. این فلگ در واقع باعث می‌شود که خروجی به صورت معکوس به ما نشان داده شود، به این معنا که به جای نشان دادن خطوطی که با عبارت تطبیق می‌یابند، خطوطی را به ما نشان می‌دهند که عبارت مورد نظر در آن‌ها پیدا نمی‌شود. برای اینکه به صورت دقیق با این دستور آشنا شویم به فایل اصلی‌مان برمی‌گردیم و کاری می‌کنیم تا اعداد مربوط به خطوط به صورت زیر در ادیتور نمایش داده شود. در ویرایشگر Vim Editor کلید ESC را فشار دهید، یک علامت : بنویسید و بعد از آن دستور زیر را قرار دهید:

set nu

حال Enter را بزنید:

حال برای نمایش خطوطی که عبارت “Linux” در آن وجود ندارد دستور زیر را اجرا کنید:

$ grep -v "Linux" welcome.txt

در نهایت خروجی ما به صورت زیر خواهد بود:

همانطور که مشاهده می‌کنید، دستور grep خطوطی که موضوع جستجوی ما در آن قرار ندارد را نشان می‌دهد.

استفاده از pipes همراه با grep

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

$ dpkg -L | grep "package-name"

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

$ dpkg -L | grep -i "openssh"

خروجی نهایی:

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

با استفاده از فلگ‌های -A و -B شما می‌توانید شماره خطوط قبل و بعد یک رشته جستجو شده را پیدا کنید. فلگ -A شماره خطوط بعد از یک رشته جستجو شده را نشان می‌دهد و فلگ -B مربوط به شماره خطوط قبل از رشته جستجو شده است. برای مثال دستور زیر را در نظر بگیرید:

$ ifconfig | grep -A 4 ens3

این دستور، خطی که شامل رشته اصلی می‌شود به همراه ۴ خط بعد از رشته جستجو شده در دستور ifconfig یعنی ens را نشان می‌دهد. خروجی این دستور به شکل زیر خواهد بود:

حال اگر از فلگ -B به صورت زیر استفاده کنیم به صورت عکس مثال بالا پیش می‌رود. یعنی اینکه خط مربوط به رشته اصلی را همراه با ۳ خط قبل از متن مربوطه در محتویات دستور ifconfig نشان می‌دهد. به مثال زیر توجه کنید:

$ ifconfig | grep -B 4 ether

استفاده از Grep همراه با عبارات با قاعده یا REGEX

منظور از REGEX همان Regular Expression یا عبارات با قاعده است. یک REGEX به سلسله‌ای از کاراکترها گفته می‌شود که برای پیدا کردن یک الگوی متنی استفاده می‌شود. چند مثال و نمونه آن را در زیر می‌توانید مشاهده کنید:

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

grep ^character file_name

برای مثال اگر بخواهیم در فایل متنی welcome.txt خطوطی که با حرف “d” شروع می‌شوند را نمایش دهیم از دستور زیر استفاده خواهیم کرد:

$ grep ^d welcome.txt

خروجی این دستور به صورت زیر خواهد بود:

برای نمایش خطوطی که با حرف “x” به پایان می‌رسند نیز از دستور زیر استفاده خواهیم کرد:

$ grep x$ welcome.txt

خروجی:

چگونه تفاوت‌های موردی را با استفاده از -i نادیده بگیریم

می‌توانیم دستور grep را به شیوه‌ای تنظیم کنیم که تمام رشته‌های تطبیق یافته با عبارت جستجو شده را بدون تمایزات و تفاوت‌های موردی به ما نشان دهد. برای مثال بیایید کلمه “berries” را در فایل خودمان جستجو کنیم. با استفاده از فلگ -i تمام حالت‌های کلمه “berries” به ما نشان داده خواهد شد.

grep -i "berries" fruits.txt

خروجی را مشاهده کنید:

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
5 از 1 رای

/@arastoo
ارسطو عباسی
کارشناس تولید و بهینه‌سازی محتوا

کارشناس ارشد تولید و بهینه‌سازی محتوا و تکنیکال رایتینگ - https://arastoo.net

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید