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

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

القصة وراء grep

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

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

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

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

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

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

يتم عرض خطوط المطابقة. في هذه الحالة ، هو سطر واحد. يتم تمييز النص المطابق. هذا لأنه في معظم التوزيعات 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 يأخذها حقًا إلى المستوى التالي.

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