اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

تفاوت بین Grep - Egrep و Fgrep در لینوکس چیست ؟

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    تفاوت بین Grep - Egrep و Fgrep در لینوکس چیست ؟

    یکی از ابزار شناخته شده جستجو روی سیستم های Unix که میتوان برای جستجوی هر چیزی، خواه یک فایل یا یک خط یا چندین خط از یک فایل، ابزار grep میباشد. این ابزار در کاربرد بسیار وسیع میباشد که با تعداد زیادی از آپشن ها همراه است به طول مثال جستجو با استفاده از پترن string یا پترن reg-ex یا reg-ex های برپایه perl و غیره.

    تفاوت دستور grep با egrep و fgrep در لینوکس




    به دلیل اینکه این دستور در کاربرد بسیار متغییر عمل میکند دارای انواع بیشماری از جمله grep, egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (Recursive GREP) و غیره میباشد. اما این دستورات تفاوت های ناچیزی با grep اصلی دارند که آنها را متمایز ساخته و توسط برنامه نویسان متفاوت سیستم های لینوکسی برای تسک های خاص مورد استفاده قرار میگیرند.

    نکته اصلی در اینجا تفاوت بین سه نوع اصلی grep, egrep و fgrep میباشد که باعث میشود کاربران لینوکسی یکی از آنها یا ورژن دیگری را با توجه به نیاز خود انتخاب کنند.


    Meta-Character های خاص Grep

    + : برابر با یک یا چندین نمونه از کاراکتر قبلی
    ? : اغلب نمایشگر یک بار تکرار از کاراکتر قبل به طول مثال a? با a یا aa مچ خواهد شد.
    ) : آغاز عبارت جایگزین
    ( : پایان عبارت جایگزین
    | : مچ شده با یکی از عبارات جدا شده توسط pip به صورت مثال "cde(a|b)" با bcde یا acde مچ خواهد شد.
    } : این متا کاراکتر نمایشگر آغاز از یک رنج مشخص شده میباشد. به طول مثال "a{2}" با aa در فایل مچ خواهد شد. (هر جای a دو بار تکرار شده باشد)
    { : این متا کاراکتر نمایشگر پایان یک رنج مشخص شده میباشد.


    تفاوت های بین Grep, Egrep و Fgrep

    یکسری از تفاوت های بین Grep, Egrep و Fgrep میتواند همانند زیر مشخص شود. برای این مجموعه از مثالها ما فایل زیر (mohammad.txt) را در نظر میگیریم و عملیات را روی آن اجرا میکنیم.
    کد:
    grep is a command that can be used on unix-like systems.
    it searches for any string in list of strings or file.
    It is very fast.
    (f|g)ile


    دستور Grep

    grep یا Global Regular Expression Print یک برنامه اصلی برای جستجو روی سیستم های Unix میباشد. که میتوان هر نوع از string را روی فایل یا لیستی از فایل ها یا حتی خروجی هر دستوری جستجو کرد.


    همچنین پیشنهاد میشود مقاله زیر را مطالعه کنید.

    12 مثال عملی از دستور Grep در Linux


    دستور grep همچنین جدای از string های نرمال Regular Expression های ابتدایی را به عنوان پترن جستجو استفاده میکند. در Basic Regular Expression ها (BRE) در حقیت متا کاراکترهایی مانند '{','}','(',')','|','+','?' معنی خودشان را از دست میدهند و با عنوان کاراکترهای نرمال string رفتار میکنند و باید از آنها صرف نظر کرد اگر که بخواهیم به عنوان کاراکترهای خاص رفتار کنند.


    همچنین پیشنهاد میشود مطالعه کنید.

    11 دستور پیشرفته Grep روی کلاس های Character و عبارات Bracket


    همچنین دستور grep از الگوریتم Boyer-Moore برای سرچ سریع هر string یا regular expression استفاده میکنند.
    کد PHP:
    grep -C 0 '(f|g)ile' mohammad.txt
    grep -C 0 '\(f\|g\)ile' mohammad.txt 
    دستور grep در لینوکس



    زمانیکه دستور بدون صرف نظر از '(' ')' و '|' اجرا میشود و سپس یک string کامل به طور مثال “(f|g)ile” را در فایل جستجو میکند سپس به جای اینکه به عنوان بخشی از استرینگ رفتار کند و در فایل به دنبال کلمه های "file" یا "gile" میگردد.



    دستور Egrep

    Egrep یا Grep -E ورژن دیگری از grep یا Extended grep میباشد. این ورژن از grep زمانیکه برای سرچ یک پترن Regular Expresion مورد استفاده قرار میگیرد بسیار سریع و موثر است از آنجایی که با متا دیتاها همانطور که هستند رفتار میکند و همانند grep آنها را به عنوان string در نظر نمیگیرد و علاوه بر این شما از بار مسئولیت صرف نظر کردن آنها همانند آنچه در grep رخ میدهد آزاد هستید. این ابزار از ERE یا مجموعه ی Extended Regular Expression استفاده میکند.

    در دستور egrep حتی اگر شما از متا کاراکترها صرف نظر نکنید این دستور همانند کاراکترهای خاص با آنها رفتار میکند و معنای خاص آنها را در نظر میگیرد و با آنها به عنوان بخشی از string رفتار نمیکند.
    کد PHP:
    egrep -C 0 '(f|g)ile' mohammad.txt
    egrep -C 0 '\(f\|g\)ile' mohammad.txt 
    دستور egrep در لینوکس



    در مثال بالا egrep هنگامی که meta-character ها صرف نظر نشده باشند دنبال رشته "file" میگردد و این به معنای استفاده ی درست از این کاراکتر هاست اما زمانیکه این کاراکتر ها صرف نظر شوند در نتیجه egrep با آنها به عنوان بخشی از string رفتار میکند و به دنبال string کامل “(f|g)ile” در فایل میگردد.



    دستور Fgrep

    دستور Fgrep یا Fixed Grep یا grep -F ورژن دیگری از دستور grep است که در جستجوی کل یک رشته به جای regular expression سریع تر است زیرا این ابزار نه regular expression ها و نه meta-charachter ها را تشخیص نمیدهد. برای جستجوی هر string مستقیم باید این ورژن از grep انتخاب و مورد استفاده قرار گیرد.

    fgrep به دنبال یک string کامل میگردد و حتی کاراکترهای خاص را به عنوان بخشی از regular expression تشخیص نمیدهد، خواه صرف نظر شده باشند یا نشده باشند.
    کد PHP:
    fgrep -C 0 '(f|g)ile' mohammad.txt
    fgrep -C 0 '\(f\|g\)ile' mohammad.txt 
    دستور fgrep در لینوکس



    زمانیکه meta-character ها صرف نظر نشده باشند این دستور به جستجوی string کامل “(f|g)ile” در فایل میپردازد و زمانیکه متا کاراکترها صرف نظر شده باشند دستور fgrep برای همه کاراکترهای “\(f\|g\)ile” در فایل را جستجو میکند.


    همچنین توصیه میشود مطالعه کنید :

    دستور awk در لینوکس برای جستجو و فیلتر کردن عبارات، کلمه و ... (بخش اول)

    10 دستور مفید برای Chaining Operators در لینوکس



    نتیجه :

    در موارد مطرح شده در بالا تفاوت بین grep, egrep و fgrep بیان کردیم. جدای از تفاوت آنها در مجموعه regular expression مورد استفاده و سرعت اجرا بقیه پارامترهای کامند لاینی برای هر سه ورژن مذکور grep, egrep و fgrep یکسان میباشند و حتی توصیه میشود به جای egrep یا fgrep از grep -E یا grep -F استفاده کنید.

    اگر شما هر گونه تفاوت دیگری بین این سه ورژن از grep میدانید با ما به اشتراک بگذارید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-22-2021, 02:09 PM.
    Instagram : https://www.instagram.com/iranlinuxforum

    Voip Trainer - Asterisk - Elastix - Agi Programming- NewRock

    Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
    Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
    Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
    LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

    Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X