الخميس، 10 مارس 2011

شرح الأداة grep بالأمثلة


بسم الله الرحمن الرحيم

الأداة grep:

grep هي أداة تستخدم للبحث في الملفات النصية أو المعطيات من برنامج أخر في نظام لينكس و أظهار الأسطر الموافقة للتعبير (Regular Expression)  إلى الشاشة أو حفظها في ملف نصي .

الاستخدام الأساسي :

  • البحث عن كلمة في ملف نصي :

grep "localhost" /etc/host

سيقوم هذا الأمر بالبحث عن الأسطر المحتوية على الكلمة "localhost" في الملف "etc/host/" .
  • البحث في معطيات برنامج :

ls -l | grep "root"

بواسطة الحرف ( | ) الذي يقوم بتحويل معطيات البرنامج ls إلى البرنامج grep  الذي يبحث عن الكلمة root في المعطيات .

التعبيرات المنتظمة (Regular Expressions) :

  • البحث عن كلمة في بداية السطر :

grep "^google" /etc/host

باستخدام الإشارة  ^  سيظهر البرنامج الأسطر التي تبدأ بالكلمة google فقط .
  • البحث عن كلمة في نهاية السطر :

grep "root$" /etc/passwd

باستخدام الإشارة $ سيطبع البرنامج الأسطر التي تنتهي بالكلمة root .
  • أظهار عدد الأسطر الفارغة في الملف :

grep -c "^$" /etc/passwd

بدمج الإشارتين ^$ سيبحث البرنامج عن الأسطر الفارغة ويطبع عدد الأسطر الفارغة وفي حالة  كتابة الأمر كالتالي $root^ بدون الأمر c- سيطبع البرنامج الأسطر المحتوية على الكلمة root فقط .
  • استخدام أشارة النقطة ( . ) في البحث :

grep "hell." /home/user/example.txt

يقوم البرنامج باستبدال النقطة بحرف واحد و البحث عن الكلمات المتوافقة في هذه الحالة سيبحث البرنامج عن الكلمات(hello,hell1,hellg,....) .

  • استخدام أشارة النجمة ( * ) في البحث :

ls -l |grep "*.txt"

تختلف هذه الإشارة عن سابقتها في أنها لا تحدد عدد الأحرف ,ففي الأمر السابق قمنا بتحويل معطيات الأمر ls إلى البرنامج وباستخدام ( * ) سيطبع البرنامج الملفات المنتهية بالامتداد txt كالتالي (a.txt, abc.txt , ab1.txt , aaa111.txt,.....).

  • استخدام أشارة النجمة ( +\ ) في البحث :

grep "hi \+hello" input.txt

ستعرض هذه الإشارة الأسطر التي تحتوي على الكلمتين  hi و hello و يفصل بينها حرف مسافة واحد على الأقل أو أكثر , و ستكون المعطيات كالتالي :
  1. hi hello
  2. hi      hello
  3. hi   hello
و تستطيع وضع أي حرف بدل محرف المسافة كالتالي :

grep "hih\+hello" input.txt

.(hihhello,hihhhhello,....) و ستكون النتائج كالتالي

  • البحث عن النصوص المحتوية على الإشارات الخاصة بالبحث :

grep 127\.1\.1\.1 /etc/hosts

لكي تستطيع البحث عن الكلمات المحتوية على الإشارات الخاصة بالبحث (*,.) يجب أن تسبقها بالإشارة (\), كما في الأمر السابق حيث سنبحث عن عنوان الأي بي :127.1.1.1   .
  • البحث ضمن مدى معين من الأحرف باستخدام [ ] :

grep "user[1-5]" input.txt
grep "user[a-zA-Z]" input.txt
grep "user[acey123]" input.txt

في المثال الأول سيقوم البرنامج بعرض الكلمة user المنهية بالأرقام برقم واحد من مجموعة الأرقام 1 إلى 5 كالتالي (user1,user2,....), أما في المثال الثاني سيعرض البرنامج الكلمة user المنتهي بحرف واحد من المجموعة a إلى z و A ألى Z , و في المثال الأخير قمنا بتحديد الأحرف بشكل فردي من المجموعة الحروف التالية (a,c,e,y,1,2,3) التي ستكون في نهاية الكلمة user.
  • استخدام التعليمة {\}\ :

grep "A\{2,5\}" input.txt

سيقوم هذا الأمر بالبحث عن الأسطر المحتوية على مجموعة تتكون من حرفين A ألى خمس أحرف كحد أقصى كالتالي (AA,AAA,..) , تستطيع دمج هذه التعليمة مع التعليمة "[]" كالتالي :

grep "[0-9]\{9\}" input.txt
grep "th[a-z]\{2,5\}" input.txt
grep "h\{3,}" input.txt
grep "h\{,5}" input.txt


في المثال الأول سيقوم البرنامج بالبحث عن الأرقام المكونة من 9 أرقام تلاحظ أننا وضعنا رقم واحد في الإشارة "\{\}" , أما في المثال الثاني سيبحث البرنامج عن الكلمات التي تبدأ بالحرفين th وتنتهي بحرفين أو خمس حروف على الأكثر , أما في المثال الثالث سيبحث البرنامج عن الكلمات التي تبدأ بالحرف h وتتكون من حرفين على الأقل أو أكثر , لاحظ كيف قمنا بكتابة الأمر , أما المثال الأخير فالبرنامج سيبحث عن كلمة تتكون من 5 أحرف على الأكثر .

  • عرض الأسطر التي لا تحتوي على كلمة معينة :

grep -v user1 input.txt

لعرض الأسطر التي لا تحتوي على الكلمة user1 يجب فقط أن تضيف المعامل "v-" بعد الأمر grep , كما تستطيع استخدام التعبيرات السابقة في هذا الأمر .

هناك 5 تعليقات:

  1. شكرا كل الشكر
    فلم اجد مصادر عربية لشرح الاوامر الا القليل

    ردحذف
    الردود
    1. لا شكر على الواجب
      و أذا لم كان عندك أي استفسار عن أي أمر و لم تجد أرجو أن تبلغني

      حذف
  2. شكرا وجزاك الله خير واتمنى تكتب لنا عن الاوامر الاكثر اهميه واستخداما بنفس الشرح

    ردحذف