در دنیای سیستم عاملهای یونیکس و لینوکس، اصطلاح 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
خروجی را مشاهده کنید:
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید