GREP(1) دستورات کاربر GREP(1)

grep, egrep, fgrep, rgrep - چاپ خطوط منطبق با الگوها

grep [گزینه...] الگوها [فایل...]
grep [گزینه...] -e الگوها ... [فایل...]
grep [گزینه...] -f فایل_الگو ... [فایل...]

دستور grep به جستجوی الگوها در هر فایل می‌پردازد. الگوها شامل یک یا چند الگو است که با نویسه خط جدید (newline) از یکدیگر جدا شده‌اند و grep هر خطی را که با یک الگو مطابقت داشته باشد چاپ می‌کند. معمولاً زمانی که از grep در یک دستور شل استفاده می‌شود، الگوها باید داخل علامت نقل‌قول (کوتیشن) قرار گیرند.

یک فایل به صورت “-” به معنای ورودی استاندارد (standard input) است. اگر هیچ فایلی داده نشود، در جستجوهای بازگشتی دایرکتوری جاری بررسی می‌شود و در جستجوهای غیربازگشتی ورودی استاندارد خوانده خواهد شد.

برنامه‌های مشتق‌شدهٔ egrep، fgrep و rgrep نیز در دسترس هستند. این برنامه‌ها به ترتیب معادل grep -E، grep -F و grep -r هستند. این موارد قدیمی (deprecated) شده‌اند، اما برای سازگاری رو به عقب نگه‌داری می‌شوند. به دلایل سازگاری و قابلیت حمل، توصیه می‌شود از این برنامه‌های قدیمی پرهیز کرده و در عوض از grep همراه با گزینه مرتبط با آن استفاده کنید.

نمایش پیام راهنما و خروج از برنامه.
نمایش شماره نسخه grep و خروج از برنامه.

تفسیر الگوها به عنوان عبارت‌های منظم گسترده (EREs).
تفسیر الگوها به عنوان رشته‌های ثابت و مشخص، نه عبارت‌های منظم.
تفسیر الگوها به عنوان عبارت‌های منظم پایه (BREs). این حالت پیش‌فرض است.
تفسیر الگوها به عنوان عبارت‌های منظم سازگار با پرل (PCREs). این گزینه هنگام ترکیب با گزینه -z (--null-data) آزمایشی است و ممکن است grep -P در مورد ویژگی‌های پیاده‌سازی نشده هشدار دهد.

استفاده از الگوها به عنوان الگوهای جستجو. اگر از این گزینه چند بار استفاده شود یا با گزینه -f (--file) ترکیب شود، تمامی الگوهای داده‌شده جستجو می‌شوند. این گزینه می‌تواند برای محافظت از الگویی که با “-” شروع می‌شود استفاده شود.
دریافت الگوها از فایل، یک الگو در هر خط. اگر از این گزینه چند بار استفاده شود یا با گزینه -e (--regexp) ترکیب شود، تمام الگوهای مشخص‌شده جستجو می‌شوند. فایل خالی شامل صفر الگو است و بنابراین با چیزی مطابقت پیدا نمی‌کند. اگر فایل برابر با - باشد، الگوها از ورودی استاندارد خوانده می‌شوند.
نادیده گرفتن تمایز حروف بزرگ و کوچک در الگوها و داده‌های ورودی، به طوری که حروفی که فقط در بزرگی و کوچکی متفاوتند با هم مطابقت داشته باشند.
عدم چشم‌پوشی از تمایز حروف بزرگ و کوچک در الگوها و داده‌های ورودی. این حالت پیش‌فرض است. این گزینه برای اسکریپت‌های شلی که قبلاً از -i استفاده کرده‌اند مفید است تا اثر آن را خنثی کند.
معکوس کردن نتیجه انطباق، جهت انتخاب و نمایش خطوطی که مطابقت ندارند.
فقط انتخاب خطوطی که بخش‌های منطبق در آن‌ها کلمات کامل را تشکیل می‌دهند. کلمه به معنای دنباله‌ای از حروف، ارقام و زیرخط (_) است. این گزینه در صورت تعیین -x بی‌اثر خواهد بود.
فقط انتخاب خطوطی که به طور دقیق و کامل با کل خط مطابقت دارند.

جلوگیری از خروجی عادی؛ به جای آن تعداد خطوط منطبق برای هر فایل ورودی چاپ می‌شود. با گزینه -v, --invert-match تعداد خطوط نامنطبق شمارش می‌شود.
احاطه کردن رشته‌های منطبق، خطوط منطبق، نام فایل‌ها، شماره خطوط و جداکننده‌ها با توالی‌های فرار رنگی برای نمایش در ترمینال. رنگ‌ها توسط متغیر محیطی GREP_COLORS تعریف می‌شوند. مقدار زمان می‌تواند never، always یا auto باشد.
جلوگیری از چاپ خروجی استاندارد؛ به جای آن فقط نام فایل‌هایی که هیچ تطابقی در آن‌ها پیدا نشده چاپ می‌شود.
جلوگیری از چاپ خروجی معمول؛ به جای آن فقط نام فایل‌هایی که تطابق دارند چاپ می‌شود. پویش هر فایل به محض یافتن اولین تطابق متوقف می‌شود.
توقف خواندن فایل پس از یافتن تعداد خط منطبق. اگر تعداد برابر ۰ باشد، بلافاصله متوقف می‌شود. مقدار ۱- به منزله بی‌نهایت است که حالت پیش‌فرض می‌باشد.
چاپ کردن تنها بخش‌های منطبق (غیر خالی) از یک خط منطبق، که هر کدام در یک خط خروجی مجزا نمایش داده می‌شوند.
حالت ساکت؛ هیچ متنی در خروجی استاندارد نوشته نمی‌شود. به محض یافتن اولین تطابق، بلافاصله با وضعیت خروج صفر (موفق) خارج می‌شود، حتی اگر خطایی رخ داده باشد. همچنین گزینه -s را مشاهده کنید.
نادیده گرفتن پیام‌های خطا درباره فایل‌های ناموجود یا غیرقابل خواندن.

چاپ افست بایتی (مبتنی بر صفر) در فایل ورودی قبل از هر خط خروجی.
چاپ نام فایل برای هر تطابق. این حالت زمانی که بیش از یک فایل برای جستجو مشخص شده باشد، پیش‌فرض است.
جلوگیری از درج پیشوند نام فایل در خروجی. زمانی که فقط یک فایل (یا فقط ورودی استاندارد) وجود دارد، پیش‌فرض است.
نمایش ورودی استاندارد با نام برچسب. برای مثال: gzip -cd foo.gz | grep --label=foo -H 'some pattern'.
درج شماره خط (مبتنی بر یک) در ابتدای هر خط خروجی.
اطمینان از تراز بودن اولین نویسه محتوای خط با یک Tab جهت خوانایی بهتر پیشوندها.
چاپ بایت صفر (نویسه ASCII NUL) به جای نویسه بعد از نام فایل (به جای newline). برای استفاده همراه با xargs -0 بسیار کارآمد است.

چاپ تعداد خط بعد از خطوط منطبق. بین گروه‌های مجزا یک خط با جداکننده (--) قرار می‌گیرد.
چاپ تعداد خط قبل از خطوط منطبق.
چاپ تعداد خط از بافت متن پیرامونی (قبل و بعد از خط منطبق).
هنگام استفاده از -A، -B یا -C، چاپ جداکننده به جای -- بین گروه‌ها.
عدم چاپ جداکننده بین گروه‌های خطوط مجاور.

پردازش فایل دودویی (باینری) همانند فایل متنی؛ معادل با --binary-files=text.
اگر داده‌های فایل نشان دهند که فایل باینری است، فرض می‌شود فایل از نوع نوع است. به طور پیش‌فرض مقدار نوع برابر با binary است که grep خروجی را پس از شناسایی داده‌های باینری سرکوب کرده و پیامی مبنی بر تطابق فایل باینری نمایش می‌دهد. اگر without-match باشد، فایل نادیده گرفته می‌شود (معادل -I). اگر text باشد، مانند فایل متنی پردازش می‌شود.
اگر فایل ورودی یک دستگاه (device)، FIFO یا سوکت باشد، از اقدام مشخص‌شده استفاده می‌شود: read (پیش‌فرض، خواندن مانند فایل عادی) یا skip (نادیده گرفتن بی‌صدا).
نحوه برخورد با دایرکتوری‌ها: read (پیش‌فرض)، skip (رد شدن) یا recurse (خواندن بازگشتی تمام محتویات دایرکتوری؛ معادل -r).
نادیده گرفتن فایل‌هایی که پسوند نام آن‌ها با الگوی wildcard الگو مطابقت دارد.
نادیده گرفتن فایل‌هایی که با الگوهای خوانده‌شده از فایل مطابقت دارند.
نادیده گرفتن دایرکتوری‌هایی که نام آن‌ها با الگو تطابق دارد.
پردازش فایل باینری به گونه‌ای که انگار هیچ دادهٔ منطبقی ندارد؛ معادل با --binary-files=without-match.
جستجو تنها در فایل‌هایی که نام پایه آن‌ها با الگو مطابقت دارد.
خواندن بازگشتی تمام فایل‌های زیر هر دایرکتوری. فقط در صورتی که پیوندهای نمادین در خط فرمان مشخص شده باشند دنبال می‌شوند.
خواندن بازگشتی تمام فایل‌های زیر هر دایرکتوری و دنبال کردن تمامی پیوندهای نمادین (برخلاف -r).

استفاده از بافر خطی در خروجی (ممکن است روی کارایی اثرگذار باشد).
رفتار با فایل‌ها به عنوان باینری (مخصوص پلتفرم‌های MS-DOS و MS-Windows جهت مدیریت خطوط CR/LF).
در نظر گرفتن داده‌های ورودی و خروجی به عنوان خطوطی که با بایت صفر (ASCII NUL) خاتمه می‌ابند به جای خط جدید.

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

دستور grep سه نوع مختلف از نحو عبارت‌های منظم را پشتیبانی می‌کند: عبارت‌های منظم پایه (BRE)، عبارت‌های منظم گسترده (ERE) و عبارت‌های سازگار با پرل (PCRE). در گنو grep ، نسخه‌های پایه و گسترده تنها نشانه‌گذاری‌های متفاوتی برای قابلیت‌های یکسان تطابق الگو هستند.

اجزای سازنده اصلی، عبارت‌های منظمی هستند که با یک نویسه منفرد تطابق دارند. اکثر نویسه‌ها، از جمله تمام حروف و اعداد، با خودشان تطابق پیدا می‌کنند. هر نویسه خاص (متاکاراکتر) با قرار گرفتن یک بک‌اسلش (\) قبل از آن، معنی تحت‌اللفظی پیدا می‌کند. نویسه نقطه (.) با هر نویسهٔ واحدی تطابق می‌یابد.

یک عبارت قلاب لیستی از نویسه‌ها است که درون [ و ] قرار می‌گیرد و با هر نویسه منفرد در آن لیست تطابق دارد. اگر اولین نویسه ^ باشد، با هر نویسه‌ای که در لیست نباشد مطابقت می‌یابد. به عنوان مثال، [0123456789] با هر رقم منفردی مطابقت دارد.

یک عبارت بازه شامل دو نویسه است که با یک خط تیره جدا شده‌اند (مانند [a-z]). همچنین دسته‌های نویسه‌ای از پیش تعریف‌شده مانند [:alnum:]، [:alpha:]، [:digit:]، [:lower:]، [:upper:] و [:space:] در دسترس هستند.

علامت توان/هشتک (^) و علامت دلار ($) به ترتیب با رشته خالی در ابتدای خط و انتهای خط مطابقت دارند.

?
مورد قبلی اختیاری است و حداکثر یک بار مطابقت می‌یابد.
*
مورد قبلی صفر یا چند بار مطابقت می‌یابد.
+
مورد قبلی یک یا چند بار مطابقت می‌یابد.
{n}
مورد قبلی دقیقاً n بار مطابقت می‌یابد.
{n,}
مورد قبلی n بار یا بیشتر مطابقت می‌یابد.
{,m}
مورد قبلی حداکثر m بار مطابقت می‌یابد (افزونه گنو).
{n,m}
مورد قبلی حداقل n بار و حداکثر m بار مطابقت می‌یابد.

دو عبارت منظم می‌توانند به هم متصل شوند. همچنین عملگر | برای انتخاب بین دو عبارت جایگزین استفاده می‌شود.

ارجاع به عقب \n که در آن n یک رقم منفرد است، با زیررشته‌ای که قبلاً توسط زیرعبارت درون پرانتز تطبیق داده شده مطابقت می‌یابد.

به طور معمول، اگر خطی انتخاب و منطبق شود وضعیت خروج ۰ است، اگر هیچ خطی منطبق نشود ۱ است و در صورت بروز خطا ۲ خواهد بود. با این حال، در صورت استفاده از گزینه -q، در صورت یافتن هر تطابقی خروجی ۰ خواهد بود.

رنگ‌ها و سایر ویژگی‌های بصری مورد استفاده برای برجسته‌سازی بخش‌های خروجی را پیکربندی می‌کند.
ترتیب مرتب‌سازی و بازه‌های حروف را تعیین می‌کند.
نوع نویسه‌ها و کدگذاری متن (مانند UTF-8 یا ASCII) را مشخص می‌کند.
زبان پیام‌های خروجی برنامه را تعیین می‌کند.
در صورت تنظیم، grep دقیقاً طبق استاندارد POSIX رفتار خواهد کرد.

این صفحه راهنما به طور متناوب نگهداری می‌شود؛ مستندات کامل معمولاً به‌روزتر هستند.

حق نشر 1998-2000, 2002, 2005-2023 بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.)

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

گزارش‌های باگ را به نشانی ارسال نمایید.

مثال زیر محل و محتوای هر خطی که شامل “f” بوده و به “.c” ختم می‌شود را در میان تمام فایل‌های دایرکتوری جاری که نامشان شامل “g” بوده و به “.h” ختم می‌شود نمایش می‌دهد:


$ grep -n -- 'f.*\.c$' *g*.h /dev/null

awk(1), cmp(1), diff(1), find(1), perl(1), sed(1), sort(1), xargs(1), read(2), pcre2(3), regex(7)

2026-09-07 GNU grep 3.11