مقدمه
دستور grep یکی از کاربردیترین و در عین حال قدرتمندترین ابزارها در محیط ترمینال لینوکس است. نام grep مخفف عبارت Global Regular Expression Print است؛ یعنی ابزاری که بررسی میکند آیا ورودی دریافتشده با یک الگوی مشخص (Regular Expression) مطابقت دارد یا نه.
در نگاه اول، grep ممکن است فقط یک ابزار ساده برای جستجوی متن به نظر برسد، اما قدرت واقعی آن زمانی آشکار میشود که از عبارات منظم (Regex) استفاده میکنید. قابلیت فیلتر کردن دادهها بر اساس الگوهای پیچیده باعث شده grep به یکی از اجزای اصلی بسیاری از زنجیرههای دستوری (Command Pipeline) در لینوکس تبدیل شود.
در این آموزش جامع از دیدگاه، یاد میگیریم چگونه از grep همراه با Regular Expression برای جستجوی سریع، دقیق و بهینهی متن استفاده کنیم. آموزش از مفاهیم پایه شروع میشود و به تکنیکهای پیشرفته ختم خواهد شد.
آنچه در این آموزش یاد میگیرید
-
جستجوی ساده و Literal با grep
-
گزینههای پرکاربرد خط فرمان برای دقیقتر کردن نتایج
-
استفاده از Regular Expression پایه (BRE)
-
Regular Expression توسعهیافته (ERE) با
-E -
Regular Expression سازگار با Perl (PCRE) با
-P -
مثالهای واقعی در مدیریت سیستم، DevOps و پردازش داده
-
نکات مربوط به عملکرد (Performance) و بهینهسازی
-
نقش grep در دنیای AI و یادگیری ماشین
نکات کلیدی (Key Takeaways)
-
grep بررسی میکند آیا ورودی با یک الگوی مشخص مطابقت دارد یا خیر
-
گزینههای مهم شامل:
-
-iنادیده گرفتن حروف بزرگ و کوچک -
-vنمایش خطوطی که الگو را ندارند -
-nنمایش شماره خط
-
-
Anchorها محل تطبیق الگو را مشخص میکنند (
^و$) -
براکتها
[]برای انتخاب کاراکترها استفاده میشوند -
کاراکترهای خاص Regex باید Escape شوند
-
-Eامکان استفاده از Regex پیشرفته را فراهم میکند -
-Pموتور قدرتمند PCRE را فعال میکند -
zgrep برای جستجو در فایلهای فشرده
.gzکاربرد دارد -
grep برای پردازش تکخطی عالی است، اما برای چندخطی مناسب نیست
پیشنیازها
برای دنبال کردن این آموزش، به یک سیستم لینوکسی نیاز دارید؛ چه یک سرور مجازی متصلشده از طریق SSH و چه سیستم شخصی. این آموزش روی Ubuntu 20.04 تست شده، اما روی تمام توزیعهای لینوکس قابل استفاده است.
آشنایی مقدماتی با Bash و خط فرمان لینوکس نیز به درک بهتر این آموزش کمک میکند.
استفاده پایه از grep
سادهترین حالت استفاده از grep، جستجوی یک الگوی متنی ثابت در فایل است:
grep "GNU" GPL-3در این دستور:
-
"GNU"الگوی جستجو -
GPL-3فایل هدف
خروجی شامل تمام خطوطی است که این رشته را دارند.
گزینههای پرکاربرد grep
نادیده گرفتن حروف بزرگ و کوچک
grep -i "license" GPL-3نمایش خطوطی که الگو را ندارند
grep -v "the" BSDنمایش شماره خطوط
grep -n "pattern" file.txtترکیب چند گزینه:
grep -vn "the" BSDRegular Expression در grep
تطبیق Literal
وقتی دقیقاً همان رشتهی ورودی را جستجو میکنید:
grep "GNU" GPL-3Anchorها
-
^ابتدای خط -
$انتهای خط
مثال:
grep "^GNU" GPL-3
grep "and$" GPL-3تطبیق هر کاراکتر با .
grep "..cept" GPL-3این الگو کلماتی مثل accept و except را پیدا میکند.
Bracket Expression
grep "t[wo]o" GPL-3یا عدم تطبیق یک کاراکتر خاص:
grep "[^c]ode" GPL-3محدوده کاراکترها
grep "^[A-Z]" GPL-3یا با POSIX:
grep "^[[:upper:]]" GPL-3تکرار الگو با *
grep "([A-Za-z ]*)" GPL-3Escape کردن کاراکترهای خاص
برای جستجوی نقطهی واقعی:
grep "^[A-Z].*\.$" GPL-3Regular Expression توسعهیافته (ERE)
فعالسازی با -E یا دستور egrep
Grouping
grep -E "(grouping)" file.txtAlternation (یا)
grep -E "(GPL|General Public License)" GPL-3Quantifierها
-
?صفر یا یک بار -
+یک یا بیشتر -
{n}تعداد دقیق -
{n,m}بازه
مثال:
grep -E "(copy)?right" GPL-3
grep -E "[AEIOUaeiou]{3}" GPL-3PCRE با -P
⚠️ فقط در GNU grep موجود است.
Greedy vs Lazy
grep -P -o "<.*?>" tags.htmlLookahead و Lookbehind
grep -P -o "license(?= document)" GPL-3
grep -P -o "(?<=version )[0-9]" GPL-3عملکرد، سازگاری و اسکریپتنویسی
بهینهسازی
برای استفاده از خروجی grep در شرطهای اسکریپت، مطالعه آموزش if-else در Shell Script توصیه میشود.
-
اجتناب از Regexهای مبهم
-
استفاده از ابزارهای سریعتر مثل
ripgrep
گزینههای مفید
grep --line-buffered
grep --mmapتفاوت نسخهها
| ابزار | توضیح |
|---|---|
| grep | Regex پایه |
| egrep | Regex پیشرفته |
| fgrep | بدون Regex |
الگوهای چندخطی
grep مناسب نیست. جایگزینها:
awk '/pattern/'
perl -0777 -ne 'print if /pattern/s'کاربردهای عملی
-
فیلتر لاگها
-
بررسی CSV
-
جستجوی سورس کد
-
امنیت و یافتن کلیدهای API
-
DevOps و CI/CD
-
پردازش داده برای AI و NLP
grep در عصر هوش مصنوعی
grep همچنان ابزار فوقسریع پردازش متن خام است. در کنار ابزارهای AI:
-
grep فیلتر میکند
-
AI تحلیل میکند
grep داده را تمیز میکند، AI آن را میفهمد.
جمعبندی
در این آموزش از دیدگاه، یاد گرفتید چگونه grep را از یک ابزار جستجوی ساده به یک موتور قدرتمند پردازش متن تبدیل کنید. تسلط بر Regular Expression در grep، سرعت، دقت و قدرت شما در کار با لینوکس را چند برابر میکند.
grep قدیمی است، اما هنوز هم بیرحمانه سریع و کاملاً ضروری است.
در کنار grep، ابزار sed نیز برای ویرایش متن در خط فرمان بسیار کاربردی است.
