ابزار grep که یکی از اساسی ترین ابزارهای یونیکس است، به خانواده ابزارهای egrep و fgrep تعلق دارد. این ابزارها، به منظور انجام عملیات جستجو در فایل‌ها و متن‌ها طراحی شده اند. بدین صورت که کاربر با تعیین معیارهای خاص جستجو از طریق دستور grep می‌تواند، فایل‌ها و محتوای آن‌ها را برای دستیابی به اطلاعات مفید جستجو نماید.

در واقع کلمه GREP مخفف عبارت Global Regular Expression Print است. اما در جواب اینکه این دستور "grep" از کجا منشا گرفته است، باید گفت grep اساساً از یک دستور خاص برای ویرایشگر متن بسیار ساده و کاربردی یونیکس به نام ed مشتق شده است. دستور ed به صورت زیر عمل می‌نماید:

g/re/p
 

هدف این دستور کاملاً شبیه چیزی است که ما در جستجوی grep بدست می‌آوریم. این دستور، تمام خطوط مطابق با یک الگوی متنی مشخص در یک فایل را نمایش می‌دهد.

در این مقاله، نصب ابزار grep را توضیح داده و مثال‌هایی را از آن ارائه خواهیم کرد. از طریق این مثال می‌توانید یاد بگیرید که چگونه و در کدام سناریو می‌توانید از آن استفاده نمایید.

دستورات و رویه‌های ذکر شده در این مقاله، برروی سیستم Ubuntu 18.04 LTS اجرا شده است.

 

این مطلب نیز ممکن است برای شما مفید باشد: دستور Ls در لینوکس (لیست کردن فایل ها و دایرکتوری ها)

 

نصب grep

اگرچه ابزار grep به طور پیش فرض در اکثر سیستم‌های لینوکس ارائه می‌شود، بااین‌حال اگر آن را در سیستم خود ندارید، برای نصب آن به صورت زیر عمل کنید:

ترمینال اوبونتو خود را از طریق Dash یا میانبر Ctrl+Alt+T باز کنید. سپس، دستور زیر را به عنوان root وارد نموده و ابزار grep را از طریق apt-get نصب کنید:

$ sudo apt-get install grep

کلید Y را هنگام نمایش درخواست برای وارد کردن y/n کلیک کنید. پس از آن، ابزار grep بر روی سیستم شما نصب می‌شود.

شما می‌توانید با بررسی نسخه grep از طریق دستور زیر، نصب را تأیید کنید:

$ grep --version

استفاده از دستور grep با مثال

در این بخش، دستور grep را با ارائه برخی از سناریوهای کاربردی بیشتر شرح می‌دهیم. در اینجا چند مثال ارائه شده است:

 

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

 

جستجوی فایل‌ها

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

ساختار:

$ ls -l | grep -i "searchword"

مثال‌ها:

$ ls -l | grep -i sample

در این دستور، کلیه فایل‌های موجود در دایرکتوری کنونی با نام حاوی کلمه "sample" نمایش داده می‌شود.

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

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

ساختار:

grep "string" filename

مثال:

$ grep "sample file" sampleFile.txt

فایل استفاده شده در دستور بالا با نام sampleFile.txt، حاوی جمله ای با رشته “sample file” است که می‌توانید آن را در خروجی فوق مشاهده کنید. كليد واژه موجود در متن با یک فرمت رنگی در نتايج جستجو ظاهر مي شوند.

 

این مطلب نیز ممکن است برای شما مفید باشد: چگونه می‌توان space را در نام فایل‌های لینوکس را خواند؟

 

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

دستور grep می‌تواند، جملات حاوی رشته مورد نظر کاربر را در تمام فایل‌های هم نوع نیز جستجو کند.

ساختار 1:

$ grep "string" filenameKeyword*

ساختار 2:

$ grep "string" *.extension

مثال1:

$ grep "sample file" sample*

در این دستور، تمام جملات حاوی رشته “sample file”، در تمام فایل‌هایی با نام حاوی کلمه کلیدی “sample” نمایش داده می‌شود.

مثال 2:

$ grep "sample file" *.txt

این دستور، تمام جملات حاوی رشته “sample file” را در کلیه فایل‌ها با پسوند txt. پیدا می‌کند.

جستجو برای یک رشته در یک فایل بدون در نظر گرفتن نوع حروف رشته

اگر دقت کرده باشید در مثال‌های بالا، رشته مورد نظر دقیقاً به همان صورت بود که در فایل‌های متنی وجود داشت. این در حالی است که اگر دستور زیر را وارد کنیم، نتیجه جستجو grep صفر خواهد بود؛ زیرا در متن موجود در فایل کلمه Sample (با حرف شروع کننده ی بزرگ) وجود ندارد.

$ grep "Sample file" *.txt

برای اینکه به دستور grep بگوییم که نوع حروف رشته جستجو شده را نادیده بگیرد، از گزینه i- در دستور grep استفاده می‌نماییم. در این صورت، نتایج جستجو تنها به خود رشته بستگی خواهد داشت.

ساختار:

$ grep -i "string" filename

مثال:

$ grep -i "Sample file" *.txt

این دستور تمام جملات حاوی رشته “Sample file” را (بدون در نظر گرفتن کوچک یا بزرگ بودن حروف آن‌ها) در کلیه فایل‌ها با پسوند txt. بدست می‌آورد.

جستجو بر اساس یک عبارت معمولی

از طریق دستور grep می‌توانید، یک عبارت با یک کلمه کلیدی شروع کننده و یک کلمه کلیدی پایان دهنده را نیز جستجو نمایید. خروجی جمله ای خواهد بود که حاوی کل عبارت بین کلمه کلیدی شروع کننده و کلمه کلیدی پایان دهنده شماست. این ویژگی بسیار قدرتمند است؛ زیرا نیاز به نوشتن یک عبارت کامل در دستور جستجو را برطرف می نماید.

ساختار:

$ grep "startingKeyword.*endingKeyword" filename

مثال:

$ grep "starting.*.ending" sampleFile.txt

این دستور، جملات حاوی شروع کننده کلمه کلیدی اشاره شده و کلمه پایان دهنده مشخص شده را از فایلی که در دستور grep مشخص شده است، چاپ می‌کند.

نمایش تعداد مشخصی از خطوط بعد از/قبل از رشته جستجو شده

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

ساختار دستور برای نمایش N خط بعد از رشته کلید:

$ grep -A  "string" filename

مثال:

$ grep -A 3 -i "samplestring" sampleFile.txt

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

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

همانطور که در شکل بالا مشاهده می‌شود، 3 خط در خروجی به نمایش گذاشته شده است که شامل خط حاوی رشته جستجو شده از فایل مورد نظر نیز می‌باشد.

ساختار دستور برای نمایش N خط قبل از رشته کلیدی:

$ grep -B  "string" filename

علاوه بر این، شما می‌توانید N خط اطراف یک رشته را نیز جستجو کنید. بدین معنی که N خط قبل و N خط بعد از رشته نیز به همراه خط شامل کلمه کلیدی نمایش داده می‌شود.

ساختار دستور برای N خط پیرامون رشته کلید:

$ grep -C  "string" filename

 

 

منبع:

vitux