اطلاعیه

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

آموزش کامل دستور grep در لینوکس به همراه 12 مثال عملی

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

    آموزش کامل دستور grep در لینوکس به همراه 12 مثال عملی

    دستور grep مخفف Global Regular Expression Print میباشد که یکی از دستورات پرکاربرد در سیستم های لینوکس / یونیکس میباشد. پس از مرور همه دستورات و مثالها، شما یاد خواهید گرفت که چگونه از grep برای جستجوی فایلها، پیدا کردن متن، الگو یا string خاص درون یک فایل در ترمینال لینوکس استفاده کنید.
    دستور grep در لینوکس






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

    11 دستور پیشرفته grep در Linux

    دستور grep در لینوکس برای جستجوی چندین پترن، کلمه، عبارت

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




    grep یک جستجو گر قدرتمند فایل میباشد که روی هر توزیع از لینوکس موجود است. اگر به هر دلیلی روی سیستم تان نصب نبود شما میتوانید آن را به آسانی و از طریق ابزار مدیریت پکیج yum روی RHEL/Centos/Fedora/Alma/Rocky و apt-get روی سیستم های Debian/Ubuntu/Mint نصب کنید :
    کد PHP:
    sudo apt-get install grep         #Debian/Ubuntu

    sudo yum install grep             #RHEL/CentOS/Fedora 




    در اینجا من نمونه های کاربردی و مفید از دستور grep برای شما توضیح میدهم :





    1 - جستجو و پیدا کردن فایل ها

    مثلا فرض کنید که روی سیستم خود ubuntu دارید و قصد دارید اسکریپت پایتون خود را تست کنید در اینترنت به دنبال منابع میگردید که متوجه میشوید دو ورژن متفاوت از پایتون موجود هستند و نمیدانید که پایتون موجود روی سیستم عامل شما که توسط اوبونتو نصب شده چه ورژنی است. به سادگی با اجرای دستور زیر میتوانید ورژن پایتون نصب شده روی سیستم تان رو متوجه شوید :
    کد PHP:
    # dpkg -l | grep -i python 

    دستور grep در لینوکس






    ابتدا دستور dpkg -l را اجرا میکنید که پکیج های deb.* موجود روی سیستم تان را لیست میکند سپس خروجی آن را به دستور grep -i python پایپ '|' مکنید که با این دستور در خروجی قبلی هر چیزی که در آن python دارد را فیلتر کرده و برای شما نمایش میدهد. آپشن i- به معنای این است که در جستجو حروف بزرگ و کوچک لحاظ نشود از آنجایی که دستور grep به حروف بزرگ و کوچک حساس (case-sensitive) میباشد. استفاده از آپشن i- یک عادت خوب است مگر اینکه شما دقیقا بخواهید به حروف کوچک یا بزرگ دقت شود.








    2 - جستجو و فیلتر فایل ها

    شما همچنین برای جستجو و فیلتر درون فایل های مجزا یا چندین فایل میتوانید از دستور grep استفاده کنید. بیایید سناریو زیر را در نظر بگیرید :


    شما با سرور ویپ تان مشکلاتی دارید و با توجه به اینکه سوال خود را در انجمن های زیادی روی اینترنت قرار دادید فرد مهربانی به شما جواب میدهد و از شما میخواهد که محتوای فایل /etc/rtpengine/rtpengine.sample.conf را در پست قرار دهید. آیا به نظرتان راحتر نیست تا خط های کامند شده در فایل را حذف کنید تا برای فردی که میخواهد کمک کند و همچنین هر کس دیگری که بعدا پست شما را میخواند راحتر باشد شما میتوانید با اجرای دستور زیر خط های comment شده را در خروجی حذف کنید :
    کد PHP:
    # grep -v "#" /etc/rtpengine/rtpengine.sample.conf 

    دستور grep در linux






    آپشن v- به grep میگوید که خروجی را برعکس کند یعنی به جای نمایش لاین های match با دستور مخالف آن عمل کنند و خطایی که با عبارت match نیستند را نمایش دهد که در دستور بالا در حقیقت خط های که "#" ندارند را نمایش میدهد.








    3 - پیدا کردن تمام فایل های فقط mp3

    دستور grep برای فیلتر کردن از stdout بسیار مفید است. مثلا در نظر بگیرید که یک پوشه کامل از فایل های موزیک و به فرمت های متفاوتی دارید شما میخواهید تمامی فایل های mp3.* از هنرمندی به نام moein پیدا کنید اما شما هیچ کدام از ترک های remixed را نمیخواهید با استفاده از دستور find و 2 بار پایپ '|' به دستور grep میتوانید به هدف خود برسید :
    کد PHP:
    find . -name "*.mp3" grep -i moein grep -vi "remix" 

    نحوه پیدا کردن فایل ها با استفاده از دستور grep






    در این مثال با استفاده از دستور find تمامی فایل های با فرمت mp3 پیدا میشوند سپس با پایپ کردن به دستور grep -i تمامی فایل هایی که نام moein در آنها است فیلتر میشوند و با کمک پایپ دوم به دستور grep -vi تمامی فایل هایی که در ان عبارت remix نباشد برگردانده میشود.








    4 - نمایش تعدادی از خط ها قبل و بعد از یک عبارت سرچ شده

    آپشن های دیگری مانند A- و B- وجود دارند (آپشن A به معنی After و آپشن B به معنی Before میباشد) که به تعداد مشخص شده، خطهای قبل و بعد از عبارت جستجو شده را نمایش میدهد. در مثال زیر ما با استفاده از دستور ip addr show اینترفیس های شبکه مان را لیست کردیم. سپس با استفاده از دستور grep اینترفیس ens192 را در خروجی فیلتر کردیم و توسط آپشن A- و عدد 4 گفتم که تعداد 4 خط بعد از اینترفیس ens192 را در خروجی نمایش بده و در دستور دوم هم با استفاده از آپشن B- گفتیم که تعداد 4 خط قبل از اینترفیس ens192 را در خروجی فیلتر کند :
    کد PHP:
    # ip addr show | grep -A 4 "ens192:"
    # ip addr show | grep -B 4 "ens192:" 

    فیلتر کردن اینترفیس شبکه با استفاده از grep










    5 - نمایش تعدادی از خط ها در محدوده عبارت سرچ شده

    آپشن C- شبیه به آپشن بالا میباشد با این تفاوت که به جای نمایش خط های قبل و یا خط های بعد از عبارت جستجو شده ما، خطوط را در 2 جهت را نمایش میدهد. مثلا دستور زیر 2 خط قبل و 2 خط بعد از عبارت جستجو شده ens192 را نمایش میدهد :
    کد PHP:
    # ip addr show | grep -C 2 "ens192:" 

    دستور grep










    6 - شمارش تعداد match ها

    مشابه به اینکه شما دستور grep را به دستوری مانند wc (شمارنده کلمه word count) پایپ '|' کنید. آپشنی در خود grep موجود است که میتواند همان عمل را برای شما انجام دهد :
    کد PHP:
    # cat /etc/rtpengine/rtpengine.sample.conf | grep -c interface


    grep command in linux










    7 - جستجوی فایل ها از طریق عبارت داده شده

    آپشن n- یکی از مفید ترین گزینه ها برای فایل های debug مربوط به error های در حین compile میباشد. این گزینه شماره line مربوط به عبارت داده شده در فایل را نمایش میدهد :
    کد PHP:
    # grep -n "interface" /etc/rtpengine/rtpengine.sample.conf 

    جستجوی فایل ها توسط دستور grep در لینوکس










    8 - جستجوی یک عبارت در تمامی پوشه ها

    اگر بخواهید عبارتی را در دایرکتوری جاری و همچنین تمامی subdirectories جستجو کنیم باید از آپشن r- برای جستجو به صورت recursively استفاده کنیم. با استفاده از این دستور عبارت ما در تمام دایرکتوری ها و دایرکتوری های زیر مجموعه آن جستجو خواهد شد :
    کد PHP:
    # grep -r "listen-ng" * 

    جستجوی فایل ها و دایرکتوری ها در لینوکس










    9 - جستجو برای کل یک pattern (به صورت کامل)

    با استفاده از آپشن w- در کامند grep میتوانیم برای کل یک pattern یا عبارت جستجو کنیم. به طور مثال استفاده از دستور زیر خطی که شامل pattern موجود در کوتیشن (") میباش را نمایش خواهد داد :
    کد PHP:
    # systemctl status rtpengine | grep -w "running"
    Activeactive (runningsince Sun 2021-06-20 02:55:03 EDT1 weeks 1 days ago 


    از طرف دیگر اگر کامند زیر را اجرا کنید هیچ جوابی به شما برنمیگرداند. چون دقیقا pattern با عبارت موجود در کوتیشن (") وجود ندارد :
    کد PHP:
    # systemctl status rtpengine | grep -w "runn" 

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










    10 - جستجوی یک عبارت در فایلی Gzipped شده

    حالا بعضی از مشتقات grep را بررسی میکنیم. اول از zgrep شروع میکنیم که دستور شبیه به zcat میباشد و برای فایل های gzipped مورد استفاده قرار میگیرد. همانند grep آپشن های یکسانی دارد و به شیوه یکسان مورد استفاده قرار میگیرد :
    کد PHP:
    # zgrep -i error /var/log/syslog.2.gz 

    فیلتر کردن یک فایل توسط دستور grep










    11 - مطابقت عبارات منظم در فایل ها

    egrep یکی از مشتقات دستور grep میباشد که در حقیقت اختصاری از Extended Global Regular میباشد. این دستور عبارت اضافه (meta-characters) همانند + ? | و () را تشخیص میدهد. egrep دستوری بسیار مفید برای جستجوی فایل های سورس و دیگر بخش های code میباشد. همچنین به جای آن میتوان از دستور grep -E استفاده نمود :
    کد PHP:
    # grep –E 





    12 - جستجو برای یک عبارت ثابت (Fixed)

    fgrep یک فایل یا لیستی از فایل ها را برای یک عبارت ثابت جستجو میکند که مشابه grep -F میباشد. یکی از رایج ترین شیوه های استفاده از دستور fgrep پاس دادن یک فایل از الگوها (pattern) به آن میباشد :
    کد PHP:
    fgrep –f file_full_of_patterns.txt file_to_search.txt 



    این مطلب نقطه شروعی بر دستور grep میباشد. اما همانطور که میدانید دستور grep قابلیت های بیشمار دیگری به منظور اهداف گوناگون را داراست. از grep میتوان در نوشتن cron job های قدرتمند همچنین shell script های بزرگ استفاده کرد. خلاق باشید و با مثال های دیگر این دستور در صفحه man آن کار کنید تا در مواقع ضرورت برای اهداف تان بتوانید به نحو احسنت از این دستور بتوانید استفاده کنید.



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

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

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





    موفق باشید
    محمد هابیلی
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 06-29-2021, 10:39 AM.

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

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

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