103.7 - جستجو در فایلهای متنی با استفاده از عبارات منظم¶
اهداف یادگیری¶
در این فصل با موارد زیر آشنا میشوید:
- استفاده از grep و ابزارهای مرتبط برای جستجو با عبارات منظم
- درک پایه عبارات منظم
کلیدواژهها¶
grep, egrep, fgrep, sed, regex
عبارات منظم¶
عبارات منظم (Regular Expressions یا regex) الگوهایی برای تطبیق متن هستند. آنها برای جستجو و دستکاری متن استفاده میشوند.
کاراکترهای پایه¶
.: هر کاراکتر*: صفر یا بیشتر از کاراکتر قبلی+: یک یا بیشتر از کاراکتر قبلی?: صفر یا یک از کاراکتر قبلی^: ابتدای خط$: انتهای خط[abc]: یکی از کاراکترهای a، b، c[^abc]: هر کاراکتر به جز a، b، c\: escape کاراکترهای خاص
grep¶
فرمان grep برای جستجو در فایلها استفاده میشود.
$ grep pattern file
$ grep -i pattern file # case insensitive
$ grep -r pattern dir # recursive
$ grep -v pattern file # inverse match
$ grep -n pattern file # show line numbers
گزینههای مفید grep¶
-Eیاegrep: از extended regex استفاده میکند.-P: از PCRE (Perl Compatible) پشتیبانی میکند (در برخی توزیعها).-o: فقط قسمتهای مطابق را چاپ میکند.-c: تعداد خطوط مطابق را نمایش میدهد.-l: نام فایلهایی که مطابق دارند را نمایش میدهد.--color=auto: قسمتهای مطابق را برجسته میکند.
مثالها:
$ grep -n --color=auto "error" /var/log/syslog
$ grep -E "foo|bar" file.txt
$ grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}" log | sort -u
egrep¶
egrep همان grep -E است و از extended regex پشتیبانی میکند.
fgrep¶
fgrep همان grep -F است و رشتههای literal را جستجو میکند، نه regex.
sed¶
sed برای ویرایش جریان متن استفاده میشود.
$ sed 's/old/new/g' file # جایگزینی
$ sed '/pattern/d' file # حذف خطوط
$ sed 's/^/# /' file # اضافه کردن کامنت
چند مثال مفید sed:
# تنها خطوطی که تغییر کردهاند را چاپ کن
$ sed -n 's/old/new/p' file
# حذف خطوط خالی
$ sed '/^$/d' file
# جایگزینی فقط در خطهای شامل pattern
$ sed '/pattern/ s/old/new/g' file
نکته
برای جلوگیری از تفسیر shell از الگوها، از quoting مناسب (مثلاً 'pattern' یا "pattern") استفاده کنید. هنگام استفاده از \ یا متغیرها، دقت کنید که شل آنها را تغییر ندهد.
نکات¶
- استفاده از
grepبرای جستجوی ساده egrepبرای regex پیشرفتهfgrepبرای جستجوی سریع رشتههای literalsedبرای ویرایش متن
تمرینها¶
- از grep برای جستجوی یک کلمه در فایل استفاده کنید.
- از egrep برای جستجوی چندین الگو استفاده کنید.
- از sed برای جایگزینی متن استفاده کنید.
- از
grep -oبرای استخراج تمام شمارههای تاریخ از یک فایل لاگ استفاده کنید. - از
grep -cبرای شمارش تعداد وقوع یک الگو در فایل استفاده کنید. - با ترکیب
grepوsed، فقط خطوط مطابق را انتخاب کنید و سپس بخشی از آنها را باsedجایگزین کنید.
خلاصه¶
در این فصل با عبارات منظم و ابزارهای جستجو مانند grep و sed آشنا شدیم. این ابزارها برای پردازش متن در لینوکس ضروری هستند.
نکات کلیدی برای آزمون
- تفاوت بین
grep,egrep(-E) وfgrep(-F) و استفاده از-Pبرای PCRE در صورت موجود بودن - سوئیچهای مفید
grep:-n,-c,-l,-o,--color=auto - استفاده از
sedبرای جایگزینی و فیلتر کردن جریان:sed 's/old/new/g',sed -n 's/old/new/p' - توجه به quoting و escaping الگوها در shell (استفاده از
'pattern'یا"pattern"بهدرستی) - تمرین عملی: استخراج تاریخها با
grep -oEو شمارش وقوع باgrep -c