كيفية استخدام أمر grep على نظام Linux

نشرت: 2022-01-29
موجه طرفية على جهاز كمبيوتر يعمل بنظام Linux.
فاطماواتي أحمد زينوري / شاترستوك

أمر Linux grep هو أداة مساعدة لمطابقة الأنماط والسلسلة تعرض أسطرًا متطابقة من ملفات متعددة. كما أنه يعمل مع إخراج الأنابيب من أوامر أخرى. نوضح لك كيف.

القصة وراء grep

الأمر grep مشهور في دوائر Linux و Unix لثلاثة أسباب. أولاً ، إنه مفيد للغاية. ثانيًا ، قد تكون ثروة الخيارات هائلة. ثالثًا ، تمت كتابته بين عشية وضحاها لتلبية حاجة معينة. الأولين يضربان ؛ الثالث هو قليلا قبالة.

كان كين طومسون قد استخرج إمكانيات البحث عن التعبير العادي من ed محرر (يُنطق ee-dee) وأنشأ برنامجًا صغيرًا - لاستخدامه الخاص - للبحث في الملفات النصية. اقترب رئيس قسمه في Bell Labs ، دوج ماكيلروي ، من طومسون ووصف المشكلة التي واجهها أحد زملائه ، لي مكماهون.

10 أوامر لينكس أساسية للمبتدئين
ذات صلة 10 أوامر لينكس أساسية للمبتدئين

كان مكماهون يحاول تحديد مؤلفي الأوراق الفيدرالية من خلال التحليل النصي. لقد احتاج إلى أداة يمكنها البحث عن العبارات والسلاسل داخل الملفات النصية. قضى طومسون حوالي ساعة ذلك المساء في جعل أداته أداة عامة يمكن استخدامها من قبل الآخرين وأعاد تسميتها باسم grep . أخذ الاسم من سلسلة الأمر ed g/re/p ، والتي تُترجم على أنها "بحث عالمي عن التعبير العادي".

يمكنك مشاهدة طومسون وهو يتحدث إلى بريان كيرنيغان حول ولادة grep .

عمليات بحث بسيطة باستخدام grep

للبحث عن سلسلة داخل ملف ، مرر مصطلح البحث واسم الملف في سطر الأوامر:

grep dave / etc / password in a terminal widnow
الإعلانات

يتم عرض خطوط المطابقة. في هذه الحالة ، هو سطر واحد. يتم تمييز النص المطابق. هذا لأنه في معظم التوزيعات يتم grep مستعار إلى:

 الاسم المستعار grep = 'grep --colour = auto'

لنلقِ نظرة على النتائج حيث توجد عدة أسطر متطابقة. سنبحث عن كلمة "المتوسط" في ملف سجل التطبيق. نظرًا لأنه لا يمكننا تذكر ما إذا كانت الكلمة مكتوبة بأحرف صغيرة في ملف السجل ، فسنستخدم الخيار -i (تجاهل الحالة):

 grep -i Average geek-1.log 

يتم عرض كل سطر مطابق ، مع تمييز النص المطابق في كل سطر.

يمكننا عرض الأسطر غير المطابقة باستخدام الخيار -v (عكس المطابقة).

 grep -v Mem geek-1.log 

لا يوجد تمييز لأن هذه خطوط غير متطابقة.

الإعلانات

يمكننا أن نجعل grep صامتًا تمامًا. يتم تمرير النتيجة إلى الصدفة كقيمة إرجاع من grep . تعني نتيجة الصفر أنه تم العثور على السلسلة ، ونتيجة واحدة تعني أنه لم يتم العثور عليها. يمكننا التحقق من رمز الإرجاع باستخدام $? معلمات خاصة:

 grep -q متوسط ​​geek-1.log
 صدى $؟
 grep -q howtogeek geek-1.log
 صدى $؟ 

عمليات البحث العودية مع grep

للبحث في الدلائل والأدلة الفرعية المتداخلة ، استخدم الخيار -r (العودي). لاحظ أنك لا تقدم اسم ملف في سطر الأوامر ، يجب عليك توفير مسار. نحن هنا نبحث في الدليل الحالي "." وأية أدلة فرعية:

 grep -r -i memfree. 

يتضمن الإخراج الدليل واسم الملف لكل سطر مطابق.

يمكننا أن نجعل grep يتبع الروابط الرمزية باستخدام الخيار -R (الإسناد العودي). لدينا رابط رمزي في هذا الدليل ، يسمى logs-folder . يشير إلى /home/dave/logs .

 ls -l logs-folder 

دعنا نكرر بحثنا الأخير باستخدام الخيار -R (اشتقاق عودي):

 grep -R -i memfree. 

يتم اتباع الارتباط الرمزي ويتم البحث في الدليل الذي يشير إليه بواسطة grep أيضًا.

البحث عن كلمات كاملة

بشكل افتراضي ، سيطابق grep سطرًا إذا ظهر هدف البحث في أي مكان في هذا السطر ، بما في ذلك داخل سلسلة أخرى. انظر إلى هذا المثال. سنبحث عن كلمة "مجانًا".

 grep -i free geek-1.log 

الإعلانات

النتائج عبارة عن سطور بها السلسلة "free" ، لكنها ليست كلمات منفصلة. إنها جزء من السلسلة "MemFree".

لفرض grep لمطابقة "كلمات" منفصلة فقط ، استخدم الخيار -w (كلمة regexp).

 grep -w -i free geek-1.log
 صدى $؟ 

لا توجد نتائج هذه المرة لأن مصطلح البحث "مجاني" لا يظهر في الملف ككلمة منفصلة.

استخدام مصطلحات بحث متعددة

يتيح لك الخيار -E (التعبير العادي الموسع) البحث عن كلمات متعددة. (يحل الخيار -E محل إصدار egrep الموقوف من grep .)

يبحث هذا الأمر عن مصطلحي بحث ، "متوسط" و "memfree".

 grep -E -w -i "average | memfree" geek-1.log 

الإعلانات

يتم عرض جميع الأسطر المطابقة لكل مصطلح من مصطلحات البحث.

يمكنك أيضًا البحث عن مصطلحات متعددة ليست بالضرورة كلمات كاملة ، لكنها يمكن أن تكون كلمات كاملة أيضًا.

يتيح لك الخيار -e (الأنماط) استخدام مصطلحات بحث متعددة في سطر الأوامر. نحن نستخدم ميزة قوس التعبير العادي لإنشاء نمط بحث. يخبر grep بمطابقة أي حرف من الأحرف الموجودة داخل الأقواس "[]." هذا يعني أن grep سيطابق إما "kB" أو "KB" أثناء البحث.

كلتا السلسلتين متطابقتان ، وفي الواقع ، تحتوي بعض الأسطر على كلا الجملتين.

مطابقة الخطوط بالضبط

لن يتطابق الحرف -x (التعبير العادي) إلا مع الأسطر التي يتطابق فيها السطر بالكامل مع عبارة البحث. لنبحث عن طابع التاريخ والوقت الذي نعرف أنه يظهر مرة واحدة فقط في ملف السجل:

 grep -x "20-يناير - 06 15:24:35" geek-1.log 

تم العثور على السطر الوحيد المطابق وعرضه.

عكس ذلك هو إظهار الأسطر غير المتطابقة فقط. يمكن أن يكون هذا مفيدًا عندما تبحث في ملفات التكوين. التعليقات رائعة ، لكن في بعض الأحيان يكون من الصعب تحديد الإعدادات الفعلية بينهم جميعًا. ها هو ملف /etc/sudoers :

الإعلانات

يمكننا تصفية سطور التعليقات بشكل فعال مثل هذا:

 sudo grep -v "#" / etc / sudoers 

هذا أسهل بكثير لتحليل.

عرض نص مطابق فقط

قد تكون هناك مناسبة لا تريد فيها رؤية السطر المطابق بالكامل ، فقط النص المطابق. الخيار -o (المطابقة فقط) يفعل ذلك بالضبط.

 grep -o MemFree geek-1.log 

يتم تقليل العرض إلى عرض النص الذي يطابق مصطلح البحث فقط ، بدلاً من سطر المطابقة بالكامل.

العد مع grep

لا يقتصر grep على النص فقط ، بل يمكن أن يوفر معلومات رقمية أيضًا. يمكننا أن نجعل grep لنا بطرق مختلفة. إذا أردنا معرفة عدد المرات التي يظهر فيها مصطلح البحث في ملف ، فيمكننا استخدام الخيار -c (العدد).

 grep -c متوسط ​​geek-1.log 

grep أن مصطلح البحث يظهر 240 مرة في هذا الملف.

يمكنك جعل grep يعرض رقم السطر لكل سطر مطابق باستخدام الخيار -n (رقم السطر).

 grep -n Jan geek-1.log 

الإعلانات

يتم عرض رقم السطر لكل سطر مطابق في بداية السطر.

لتقليل عدد النتائج المعروضة ، استخدم الخيار -m (الحد الأقصى للعدد). سنقصر الإخراج على خمسة أسطر متطابقة:

 grep -m5 -n Jan geek-1.log 

مضيفا السياق

غالبًا ما تكون القدرة على رؤية بعض الأسطر الإضافية - السطور غير المتطابقة - لكل سطر مطابق مفيدًا في الغالب. يمكن أن يساعد في التمييز بين الخطوط المتطابقة التي تهتم بها.

لإظهار بعض الأسطر بعد سطر المطابقة ، استخدم الخيار -A (بعد السياق). نطلب ثلاثة أسطر في هذا المثال:

 grep -A 3 -x "20-Jan-06 15:24:35" geek-1.log 

لرؤية بعض الأسطر قبل السطر المطابق ، استخدم الخيار -B (السياق قبل).

 grep -B 3 -x "20-Jan-06 15:24:35" geek-1.log 

ولتضمين الأسطر من قبل وبعد سطر المطابقة ، استخدم الخيار -C (السياق).

 grep -C 3 -x "20-Jan-06 15:24:35" geek-1.log 

إظهار الملفات المتطابقة

لمشاهدة أسماء الملفات التي تحتوي على مصطلح البحث ، استخدم الخيار -l (الملفات ذات المطابقة). لمعرفة ملفات التعليمات البرمجية المصدر C التي تحتوي على مراجع إلى ملف الرأس sl.h ، استخدم هذا الأمر:

 grep -l "sl.h" * .c 

يتم سرد أسماء الملفات ، وليس الأسطر المتطابقة.

الإعلانات

وبالطبع يمكننا البحث عن الملفات التي لا تحتوي على مصطلح البحث. الخيار -L (ملفات بدون تطابق) يفعل ذلك بالضبط.

 grep -L "sl.h" * .c 

بداية ونهاية الأسطر

يمكننا إجبار grep على عرض التطابقات الموجودة في بداية السطر أو نهايته فقط. يطابق عامل التعبير العادي "^" بداية السطر. ستحتوي جميع الأسطر الموجودة في ملف السجل عمليًا على مسافات ، لكننا سنبحث عن الأسطر التي تحتوي على مسافة كأول حرف لها:

 grep "^" geek-1.log 

يتم عرض الأسطر التي تحتوي على مسافة كالحرف الأول - في بداية السطر.

لمطابقة نهاية السطر ، استخدم عامل تشغيل التعبير العادي “$”. سنبحث عن الأسطر التي تنتهي بـ "00".

 grep "00 $" geek-1.log 

تعرض الشاشة السطور التي تحتوي على "00" كأحرف نهائية.

استخدام الأنابيب مع grep

بالطبع ، يمكنك توجيه الإدخال إلى grep ، وتوجيه الإخراج من grep إلى برنامج آخر ، ووضع grep في منتصف سلسلة الأنابيب.

الإعلانات

لنفترض أننا نريد رؤية جميع تكرارات السلسلة "ExtractParameters" في ملفات شفرة المصدر للغة C. نعلم أنه سيكون هناك عدد قليل جدًا ، لذلك نقوم بتوجيه الناتج إلى less :

 grep "ExtractParameters" * .c | أقل 

يتم تقديم الإخراج في less .

يتيح لك هذا تصفح قائمة الملفات واستخدام وسيلة بحث less's .

إذا قمنا بتوجيه الإخراج من grep إلى wc واستخدمنا الخيار -l (الأسطر) ، فيمكننا حساب عدد الأسطر في ملفات التعليمات البرمجية المصدر التي تحتوي على “ExtractParameters”. (يمكننا تحقيق ذلك باستخدام خيار grep -c (العد) ، ولكن هذه طريقة رائعة لتوضيح الأنابيب خارج grep .)

 grep "ExtractParameters" * .c | مرحاض -l 

باستخدام الأمر التالي ، نقوم بتوصيل الإخراج من ls إلى grep وتوصيل الإخراج من grep إلى sort . نحن ندرج الملفات في الدليل الحالي ، ونختار تلك التي تحتوي على السلسلة "Aug" بداخلها ، ونفرزها حسب حجم الملف:

 ls -l | grep "أغسطس" | فرز + 4n 

دعنا نقسم ذلك:

  • ls -l : قم بإجراء قائمة طويلة للملفات باستخدام ls .
  • grep "Aug" : حدد السطور من القائمة ls التي تحتوي على كلمة "Aug". لاحظ أن هذا سيؤدي أيضًا إلى العثور على الملفات التي تحتوي على كلمة "أغسطس" في أسمائها.
  • Sort + 4n: قم بفرز الإخراج من grep في العمود الرابع (حجم الملف).

نحصل على قائمة مرتبة بجميع الملفات التي تم تعديلها في أغسطس (بغض النظر عن السنة) ، بترتيب تصاعدي لحجم الملف.

ذات صلة: كيفية استخدام الأنابيب على نظام Linux

grep: أقل أمرًا ، أكثر من حليف

grep هو أداة رائعة تحت تصرفك. يعود تاريخه إلى عام 1974 وما زال قوياً لأننا نحتاج إلى ما يفعله ، ولا شيء يفعله أفضل.

اقتران grep ببعض التعبيرات العادية-fu يأخذها حقًا إلى المستوى التالي.

ذات صلة: كيفية استخدام التعبيرات العادية الأساسية للبحث بشكل أفضل وتوفير الوقت

ذات صلة: أفضل أجهزة كمبيوتر Linux المحمولة للمطورين والمتحمسين