**grep** یک نرم‌افزار خط فرمان است که برای جستجو کردن در داده‌ها و پیدا کردن خطوطی که با یک عبارت باقاعده منطبق هستند، استفاده می‌شود. گرپ در اصل برای سیستم‌عامل یونیکس نوشته شد اما امروزه برای تمام سیستم‌عامل‌های شبه یونیکس موجود است. نام grep از دستور g/re/p در ویرایشگر متن اد می‌آید. (مخفف عبارت **g**lobally search a **r**egular **e**xpression and **p**rint به معنی یک عبارت باقاعده را به صورت سراسری جستجو و چاپ کن) که همان کار را انجام می‌دهد: یک فایل (یا ورودی استاندارد یا هر داده دیگری) را به صورت سراسری جستجو کرده و خطوطی که با یک عبارت باقاعده منطبق هستند را پیدا کرده و در خروجی استاندارد چاپ می‌کند.

در ویرایشگر 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 به جای اینکه خطوط حاوی الگو را چاپ کند، اسم فایلی که خط مورد نظر در آن قرار دارد را چاپ کند.

منابع
-----

* مشارکت‌کنندگان ویکی‌پدیا. «grep». در *دانشنامهٔ ویکی‌پدیای انگلیسی*، بازبینی‌شده در ۱۰ ژوئن ۲۰۱۲.

| * ن
* ب
* و
برنامه‌های واسط خط فرمان یونیکس و shell builtins |
| --- |
| سامانهٔ پرونده | 
* cat
* cd
* Chmod
* Chown
* Chgrp
* چک‌سام (دستور لینوکس)
* cmp
* CP
* dd
* du
* df
* file
* Fsck
* fuser
* ln
* Ls
* Mkdir
* Mount
* Mv
* pax
* Pwd
* rm
* Rmdir
* size
* split
* tee
* دستگاه حسی‌تنی
* type
* umask

 |
| فرایندها | 
* at
* bg
* Chroot
* cron
* fg
* Kill
* Killall
* nice
* pgrep
* Pkill
* ps
* Pstree
* time
* top

 |
| محیط کاربری | 
* clear
* Env
* exit
* finger
* history
* فهرست ابزارهای یونیکس
* logname
* mesg
* Passwd
* اس‌یو
* Sudo
* uptime
* talk
* tput
* Uname
* W (یونیکس)
* wall
* who
* Whoami
* write

 |
| پردازش متن | 
* awk
* banner
* basename
* comm
* csplit
* cut
* Diff
* Dirname
* ed
* ex
* fmt
* fold
* head
* iconv
* join
* less
* more
* nl
* paste
* Sed
* sort
* spell
* رشته‌ها (یونیکس)
* دم (عضو)
* TR
* uniq
* وی‌آی
* wc
* xargs

 |
| Shell builtins | 
* alias
* echo
* expr
* printf
* sleep
* test
* true and false
* unset
* Wait
* Yes

 |
| شبکه | 
* dig
* host
* Ifconfig
* inetd
* nc
* Netstat
* nslookup
* Ping
* rdate
* rlogin
* route
* ssh
* Traceroute

 |
| جستجو | 
* find
* Grep
* locate
* whatis
* whereis

 |
| مستندسازی | 
* apropos
* help
* man

 |
| گوناگون | 
* bc
* dc
* cal
* lp
* od

 |
| *فهرست ابزارهای یونیکس* |