خانه » آموزش دستور Grep با مثال هایی برای مبتدیان
آموزش لینوکس

آموزش دستور Grep با مثال هایی برای مبتدیان

در این آموزش قصد داریم با دستور grep آشنا شویم . Grep مخفف Global regular expression print است . همانطور که از نام آن پیداست، Grep برای جستجوی در فایل های متنی از عبارات منظم (به طور خلاصه regex ) استفاده می کند و خطوط مطابق با الگوی داده شده را در یک فایل متنی چاپ می کند. اگر هیچ فایلی داده نشود، grep الگوی داده شده را به صورت بازگشتی در فایل های دایرکتوری فعلی جستجو می کند. Grep دو نوع دارد، یعنی egrep و fgrep. این گونه ها منسوخ شده اند اما برای سازگاری با گذشته ارائه شده اند. به جای استفاده از “grep -E” و “grep -F”، می توانید به ترتیب از “egrp” و “fgrep” استفاده کنید. بدون هیچ مقدمه ای، اجازه دهید شروع کنیم.

    نمونه های دستور Grep

    من یک فایل به نام file.txt با چند کلمه تصادفی دارم . اجازه دهید نگاهی به file.txt بیندازیم:

    $ cat file.txt
    linuxme.ir
    Linuxme.ir
    Bili$px
    linux
    linus
    unix
    technology
    hello world
    HELLO world

    برای شروع جستجو، فقط grep را تایپ کنید و سپس آنچه را که به دنبال آن و در کجا به دنبال آن هستید را تایپ کنید. به عنوان مثال، من قصد دارم به دنبال رشته “nix” در file.txt بگردم. برای انجام این کار، اجرا می کنم:

    $ grep nix file.txt

    خروجی نمونه:

    unix

    همانطور که در خروجی بالا مشاهده می کنید، یک کلمه دریافت کردیم که حاوی الگوی تطبیق “nix” است. اگر رشته جستجو دارای دو کلمه است، آنها را در داخل نقل قول های تکی مانند زیر ذکر کنید.

    $ grep 'hello world' file.txt 
    hello world

    همچنین می توانید از پرچم n برای نشان دادن شماره خطوط در خروجی استفاده کنید:

    $ grep -n nix file.txt

    خروجی نمونه:

    6:unix

    این می تواند زمانی مفید باشد که با یک کد بسیار طولانی کار می کنید.

    لطفاً توجه داشته باشید که grep به حروف کوچک و بزرگ حساس است . به عنوان مثال، هنگامی که “li” را جستجو می کنید ، خطوط حاوی حروف بزرگ یعنی Li نمایش داده نمی شود.

    مثال زیر را بررسی کنید.

    $ grep li file.txt  
    linuxme.ir
    Bili$px
    linux
    linus

    اما، من کلمه دیگری به نام “Linuxme.ir” در file.txt دارم، اما grep آن را فهرست نکرده است.

    با این حال، اگر می‌خواهید حساس به حروف کوچک و بزرگ را نادیده بگیرید، می‌توانید از پرچم i مانند زیر استفاده کنید.

    $ grep -i li file.txt 
    linuxme.ir
    Linuxme.ir
    Bili$px
    linux
    linus
    $ grep -i 'hello world' file.txt 
    hello world
    HELLO world

    حالا grep اهمیتی به حروف بزرگ نمی‌دهد و در نتیجه کلماتی را به دست آوردیم که هم حروف بزرگ و هم حروف کوچک دارند.

    ما همچنین می توانیم خروجی یک دستور را به grep پایپ کنیم. به مثال زیر دقت کنید.

    $ cat file.txt | grep li 
    linuxme.ir
    Bili$px
    linux
    linus

    حالا ببین چی داریم خروجی file.txt به grep منتقل می شود و کلمات حاوی حروف “li” در file.txt نمایش داده می شوند.

    همچنین می توانیم از برخی کاراکترهای خاص یا عبارات منظم در grep استفاده کنیم.

    • ^ – در ابتدای خط جستجو کنید.
    • $ – در انتهای خط جستجو کنید.
    • – هر جای خط را جستجو کنید.

    بگذارید یک مثال به شما نشان دهم تا بتوانید بفهمید که کجا و چگونه از آن کاراکترهای خاص استفاده کنید.

    قبلاً می‌دانید، ما می‌توانیم کلماتی را که شامل رشته «li» هستند ، مانند زیر جستجو کنیم.

    $ grep lin file.txt
    linuxme.ir
    Bili$px
    linux
    linus

    اما اگر بخواهید فقط خطوطی را جستجو کنید که فقط با کلمه “li” شروع می شوند چه می شود. شما نمی خواهید همه کلماتی حاوی این رشته هستند را نمایش دهید، بلکه فقط کلماتی را که دارای رشته “li” در ابتدا هستند نمایش دهید. اینجاست که کاراکترهای خاص به کار می آیند.

    برای جستجوی کلماتی که با الگوی “li” در ابتدای خط در یک فایل مطابقت دارند، اجرا کنید:

    $ grep ^li file.txt
    linuxme.ir
    linux
    linus

    به طور مشابه، می‌توانیم کلماتی را که با یک حرف خاص ختم می‌شوند، به عنوان مثال “x” ، مانند زیر جستجو کنیم.

    $ grep x$ file.txt
    linux
    unix

    همچنین، می توانید کلماتی را که حاوی هر کاراکتری هستند با استفاده از (نقطه).

    به عنوان مثال، اجازه دهید هر کلمه ای را که دارای “n” در فایل است جستجو کنیم .

    $ grep .n file.txt
    linuxme.ir
    Linuxme.ir
    linux
    linus
    unix
    technology

    اکنون باید درک اولیه ای از استفاده از grep داشته باشید. اجازه دهید پیش برویم و دو نوع دیگر، یعنی egrep و fgrep را یاد بگیریم .

    نمونه های دستور Egrep

    egrep مخفف extended grep است . این شبیه به دستور “grep -E” است . تمام کارهایی که grep انجام می دهد را انجام خواهد داد. با این حال، برخی از عملکردهای اضافی، مانند استفاده از regex پیچیده، نسبت به دستور معمولی grep را ارائه می دهد.

    به عنوان مثال، ما می توانیم هر کلمه ای را که با “h” یا “u” شروع می شود جستجو کنیم .

    به یاد داشته باشید که برای جستجوی کلمات در ابتدای خط از نماد caret (^) استفاده می کنیم. بنابراین، دستور ما برای جستجوی فوق به صورت زیر خواهد بود:

    $ egrep '^(h|u)' file.txt
    unix
    hello world

    ما همه کلماتی را داریم که با “h” یا “u” شروع می شوند. لطفا توجه داشته باشید که دستور grep معمولی نمی تواند این کار را انجام دهد.

    به طور مشابه، ما می توانیم خطوطی را جستجو کنیم که با هر محدوده کاراکتری بین “l” تا “u” شروع می شوند. یعنی خطوطی را که با l، m، n، o، p، q، r، s، t و u شروع می‌شوند، دریافت می‌کنیم. هر چیز دیگری از نتیجه حذف خواهد شد.

    $ egrep '^[lu]' file.txt
    linuxme.ir
    linux
    linus
    unix
    technology

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

    برای نمایش تمام خطوطی که با حروف بزرگ و کوچک شروع می شوند، از:

    $ egrep '^[lu]|[LU]' file.txt

    یا

    $ egrep '^([lu]|[LU])' file.txt

    خروجی نمونه:

    linuxme.ir
    Linuxme.ir
    linux
    linus
    unix
    technology

    اکنون کلماتی را داریم که با دامنه کاراکتر “l” تا “u” شروع می شوند (حروف بزرگ یا کوچک).

    مثال های دستور Fgrep

    fgrep مخفف  fast grep است . این شبیه به “grep -F” است . fgrep نمی تواند عبارات منظم یا کاراکترهای خاص را تشخیص دهد. از fgrep می توان در جایی که می خواهید عبارات منظم ارزیابی شوند استفاده کرد.

    برای مثال، از دستور زیر برای یافتن کلماتی که به “x” ختم می‌شوند استفاده می‌کنیم .

    $ grep x$ file.txt
    linux
    unix

    حالا همین دستور را با fgrep اجرا کنید.

    $ fgrep x$ file.txt

    چیزی نمایش نمی دهد، زیرا نمی تواند کاراکترهای خاص را ارزیابی کند.

    حالا بیایید نمونه دیگری را ببینیم. برای جستجوی کلماتی که با رشته “i$” ​​مطابقت دارند با دستور grep، این کار را انجام می دهیم:

    $ grep i$ file.txt

    اما، ما چیزی دریافت نمی کنیم، چرا؟ زیرا طبق دستور بالا از نماد دلار($) برای یافتن کلماتی که به “i” ختم می شوند استفاده می کنیم. از آنجایی که هیچ کلمه ی با “i” در file.txt وجود نداشت، چیزی دریافت نمی کنیم.

    حالا همین دستور را با fgrep اجرا کنید.

    $ fgrep i$ file.txt
    Bili$px

    اینجاست که از دستور fgrep استفاده می کنیم. به سادگی نماد دلار (البته کاراکتر ویژه) را نادیده می گیرد و کلمه ای را که حاوی رشته “$i” ​​است نمایش می دهد.

    برای جزئیات بیشتر در مورد grep، تایپ کنید:

    $ grep -- help

    تمام گزینه های ممکن را ارائه می دهد. یا به صفحات man مراجعه کنید.

    Grep یکی از دستورات مهمی است که باید آن را به طور کامل یاد بگیرید.

    اکنون می دانید grep چیست و چگونه از آن برای جستجوی فایل های متنی با الگوهای منطبق در گنو/لینوکس استفاده کنید. امیدوارم این مفید بوده باشد.

    مهدی منصوری

    من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم. هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

    درباره نویسنده

    مهدی منصوری

    من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم.
    هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

    افزودن نظر

    برای ارسال نظرات خود اینجا را کلیک کنید