مخفف GREP
Globally search a Regular Expression and Print
19
grep یک نرمافزار خط فرمان است که برای جستجو کردن در دادهها و پیدا کردن خطوطی که با یک عبارت باقاعده منطبق هستند، استفاده میشود. گرپ در اصل برای سیستمعامل یونیکس نوشته شد اما امروزه برای تمام سیستمعاملهای شبه یونیکس موجود است. نام grep از دستور g/re/p در ویرایشگر متن اد میآید. (مخفف عبارت globally search a regular expression and print به معنی یک عبارت باقاعده را به صورت سراسری جستجو و چاپ کن) که همان کار را انجام میدهد: یک فایل (یا ورودی استاندارد یا هر داده دیگری) را به صورت سراسری جستجو کرده و خطوطی که با یک عبارت باقاعده منطبق هستند را پیدا کرده و در خروجی استاندارد چاپ میکند.
در ویرایشگر ed که توسط کن تامسون نوشته شده بود، دستوری وجود داشت که خطوطی که حاوی یک الگوی خاص بودند را چاپ میکرد. کن تامسون برنامه گرپ را به صورت مستقل برای انجام این کار طراحی کرد تا نیازی به ed نباشد. در صفحه راهنمایی که در نسخه ۴ یونیکس وجود دارد، تاریخ رسمی ایجاد grep چهارم مارس ۱۹۷۳ ذکر شده است.
گرپ فایلهایی که در آرگومانها مشخص شده اند، یا ورودی استانداردش را، برای پیدا کردن خطوطی که حاوی یک عبارت باقاعده هستند جستجو میکند. (اگر در آرگومانها فایلی مشخص نشده بود). خطوط پیدا شده در خروجی استاندارد چاپ میشوند. برای مثال فرض کنید یک فایل متنی به نام fruitlist.txt داریم که اسم تعدادی میوه در آن نوشته شده است. میخواهیم خطوطی که حاوی کلمه apple هستند را پیدا کنیم:
grep apple fruitlist.txt
تطبیق وقتی رخ میدهد که دنبالهای از کاراکترها تشخیص داده شوند. برای مثال خطوطی که شامل pineapple و apples هستند بدون در نظر گرفتن مرزی که بین کلمات وجود دارد چاپ میشوند. (با فرض اینکه این خطوط در فایل وجود دارند)
با این حال الگویی که در آرگومان مشخص شده به حروف کوچک و بزرگ حساس است. بنابراین در مثال بالا، اگر خطی حاوی کلمه Apple (با حرف A بزرگ) وجود داشته باشد، آن خط تشخیص داده نمیشود. مگر اینکه در آن خطها علاوه بر کلمه Apple، کلمه apple هم وجود داشته باشد. میتوان قابلیت حساس بودن به حروف کوچک و بزرگ را با مشخص کردن گزینه -i در خط فرمان خاموش کرد.
در خط فرمان میتواند چندین فایل را برای جستجو مشخص کرد. مثلاً برای جستجو کردن تمام فایلهایی که نام آنها به .txt ختم میشود، میتوان از * استفاده کرد:
grep apple *.txt
از عبارات باقاعده میتوان برای جستجو کردن الگوهای متنی پیشرفته تری استفاده کرد. مثلاً برای پیدا کردن تمام خطوطی که با حرف a شروع میشوند و به دنبال آن هر کاراکتر دلخواهی قرار داشته باشد و سپس ple آمده باشد، میتوان از دستور زیر استفاده کرد.
grep ^a.ple fruitlist.txt
همانطور که گفته شد، قبل از گرپ دستوری در ویرایشگر ed وجود داشت که برای انجام همین کار استفاده میشد. قبل از آنکه برنامه مستقل گرپ برای جستجو در فایلها بوجود آید، برای جستجوی یک الگو باید چنین کاری انجام میشد:
ed fruitlist.txt
g/^a.ple/p
q
دستور اول فایل را در ویرایشگر باز میکند. دستور دوم الگوی خواسته شده را جستجو میکند و نتایج را در صفحه چاپ میکند. دستور سوم هم از ویرایشگر خارج میشود.
مانند بیشتر دستورهای یونیکس، گرپ هم میتواند گزینههایی در خط فرمان دریافت کند که این گزینه رفتار گرپ را مشخص میکنند. برای مثال گزینه l (حرف L کوچک) باعث میشود تا grep به جای اینکه خطوط حاوی الگو را چاپ کند، اسم فایلی که خط مورد نظر در آن قرار دارد را چاپ کند.
ارسال نظردر ویرایشگر ed که توسط کن تامسون نوشته شده بود، دستوری وجود داشت که خطوطی که حاوی یک الگوی خاص بودند را چاپ میکرد. کن تامسون برنامه گرپ را به صورت مستقل برای انجام این کار طراحی کرد تا نیازی به ed نباشد. در صفحه راهنمایی که در نسخه ۴ یونیکس وجود دارد، تاریخ رسمی ایجاد grep چهارم مارس ۱۹۷۳ ذکر شده است.
گرپ فایلهایی که در آرگومانها مشخص شده اند، یا ورودی استانداردش را، برای پیدا کردن خطوطی که حاوی یک عبارت باقاعده هستند جستجو میکند. (اگر در آرگومانها فایلی مشخص نشده بود). خطوط پیدا شده در خروجی استاندارد چاپ میشوند. برای مثال فرض کنید یک فایل متنی به نام fruitlist.txt داریم که اسم تعدادی میوه در آن نوشته شده است. میخواهیم خطوطی که حاوی کلمه apple هستند را پیدا کنیم:
grep apple fruitlist.txt
تطبیق وقتی رخ میدهد که دنبالهای از کاراکترها تشخیص داده شوند. برای مثال خطوطی که شامل pineapple و apples هستند بدون در نظر گرفتن مرزی که بین کلمات وجود دارد چاپ میشوند. (با فرض اینکه این خطوط در فایل وجود دارند)
با این حال الگویی که در آرگومان مشخص شده به حروف کوچک و بزرگ حساس است. بنابراین در مثال بالا، اگر خطی حاوی کلمه Apple (با حرف A بزرگ) وجود داشته باشد، آن خط تشخیص داده نمیشود. مگر اینکه در آن خطها علاوه بر کلمه Apple، کلمه apple هم وجود داشته باشد. میتوان قابلیت حساس بودن به حروف کوچک و بزرگ را با مشخص کردن گزینه -i در خط فرمان خاموش کرد.
در خط فرمان میتواند چندین فایل را برای جستجو مشخص کرد. مثلاً برای جستجو کردن تمام فایلهایی که نام آنها به .txt ختم میشود، میتوان از * استفاده کرد:
grep apple *.txt
از عبارات باقاعده میتوان برای جستجو کردن الگوهای متنی پیشرفته تری استفاده کرد. مثلاً برای پیدا کردن تمام خطوطی که با حرف a شروع میشوند و به دنبال آن هر کاراکتر دلخواهی قرار داشته باشد و سپس ple آمده باشد، میتوان از دستور زیر استفاده کرد.
grep ^a.ple fruitlist.txt
همانطور که گفته شد، قبل از گرپ دستوری در ویرایشگر ed وجود داشت که برای انجام همین کار استفاده میشد. قبل از آنکه برنامه مستقل گرپ برای جستجو در فایلها بوجود آید، برای جستجوی یک الگو باید چنین کاری انجام میشد:
ed fruitlist.txt
g/^a.ple/p
q
دستور اول فایل را در ویرایشگر باز میکند. دستور دوم الگوی خواسته شده را جستجو میکند و نتایج را در صفحه چاپ میکند. دستور سوم هم از ویرایشگر خارج میشود.
مانند بیشتر دستورهای یونیکس، گرپ هم میتواند گزینههایی در خط فرمان دریافت کند که این گزینه رفتار گرپ را مشخص میکنند. برای مثال گزینه l (حرف L کوچک) باعث میشود تا grep به جای اینکه خطوط حاوی الگو را چاپ کند، اسم فایلی که خط مورد نظر در آن قرار دارد را چاپ کند.