پرش به محتویات

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 پشتیبانی می‌کند.

$ egrep 'pattern1|pattern2' file  # OR
$ egrep '(abc)+' file  # one or more

fgrep

fgrep همان grep -F است و رشته‌های literal را جستجو می‌کند، نه regex.

$ fgrep 'literal string' file

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 برای جستجوی سریع رشته‌های literal
  • sed برای ویرایش متن

تمرین‌ها

  1. از grep برای جستجوی یک کلمه در فایل استفاده کنید.
  2. از egrep برای جستجوی چندین الگو استفاده کنید.
  3. از sed برای جایگزینی متن استفاده کنید.
  4. از grep -o برای استخراج تمام شماره‌های تاریخ از یک فایل لاگ استفاده کنید.
  5. از grep -c برای شمارش تعداد وقوع یک الگو در فایل استفاده کنید.
  6. با ترکیب 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