كيفية استبعاد الأنماط والملفات والدلائل باستخدام grep

نشرت: 2022-06-29
كمبيوتر محمول Linux يعرض موجه bash
fatmawati achmad zaenuri / Shutterstock.com

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

أمر grep

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

ولادة grep قبل تاريخ لينكس. تم تطويره في أوائل السبعينيات على نظام Unix. يأخذ اسمه من تسلسل المفاتيح g / re / p في محرر سطر ed (بالمناسبة ، يُنطق "ee-dee"). هذا يرمز إلى g lobal ، re gular express search ، p rint مطابقة الأسطر.

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

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

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

باستثناء الأنماط

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

نحن نستخدم ملفًا قصيرًا يحتوي على نص قصيدة Jabberwocky للويس كارول. في هذين المثالين ، نبحث عن سطور تطابق مصطلح البحث "Jabberwock".

 القط jabberwocky.txt | grep "Jabberwock"
 grep "Jabberwock" jabberwocky.text 

طريقتان مختلفتان للبحث في نفس الملف النصي باستخدام grep

يتم سرد الأسطر التي تحتوي على مطابقات دليل البحث بالنسبة لنا ، مع تمييز العنصر المطابق في كل سطر باللون الأحمر. هذا بحث مباشر. ولكن ماذا لو أردنا استبعاد الأسطر التي تحتوي على كلمة "Jabberwock" وطباعة الباقي؟

يمكننا تحقيق ذلك باستخدام الخيار -v (تطابق معكوس). يسرد هذا الأسطر التي لا تطابق مصطلح البحث.

 grep -v "Jabberwock" jabberwocky.text 

استخدام خيار البحث المقلوب -v مع grep

يتم سرد الأسطر التي لا تحتوي على "Jabberwock" في نافذة المحطة الطرفية.

كل الأسطر التي لا تحتوي على الكلمة jabberwock

يمكننا استبعاد أي عدد من المصطلحات كما نرغب. دعنا نصفي أي سطور تحتوي على "Jabberwock" وأي سطور تحتوي على "و". لتحقيق ذلك سنستخدم الخيار -e (تعبير). نحتاج إلى استخدامه لكل نمط بحث نستخدمه.

 grep -v -e "Jabberwock" -e "و" jabberwocky.txt 

استخدام عبارات بحث متعددة مع grep

هناك انخفاض مقابل في عدد الأسطر في الإخراج.

أسطر النص التي لا تتطابق مع أي من مصطلح البحث

إذا استخدمنا الخيار -E (regexes الموسعة) ، فيمكننا دمج أنماط البحث مع “ | "، والذي لا يشير في هذا السياق إلى أنبوب ، فهو عامل التشغيل المنطقي OR .

 grep -Ev "Jabberwock | و" jabberwocky.txt 

استخدام عامل التشغيل المنطقي مع grep

نحصل على نفس المخرجات تمامًا كما حصلنا عليها مع الأمر السابق الطويل.

أسطر النص التي لا تتطابق مع أي من مصطلح البحث

تنسيق الأمر هو نفسه إذا كنت تريد استخدام نمط regex بدلاً من دليل بحث صريح. سيستبعد هذا الأمر جميع الأسطر التي تبدأ بأي حرف في مجموعة "ACHT".

 grep -Ev "^ ACHT" jabberwocky.txt 

استبعاد الملفات التي تبدأ بأحرف معينة

لرؤية الخطوط التي تحتوي على نمط ولكنها لا تحتوي أيضًا على نمط آخر ، يمكننا grep إلى grep . سنبحث عن جميع الأسطر التي تحتوي على كلمة "Jabberwock" ثم نصفي أي سطور تحتوي أيضًا على كلمة "slain".

 grep "Jabberwock" jabberwocky.txt | grep -v "slain" 

الأنابيب grep في grep لتصفية مرتين

باستثناء الملفات

يمكننا أن نطلب من grep البحث عن سلسلة أو نمط في مجموعة من الملفات. يمكنك سرد كل ملف في سطر الأوامر ، ولكن مع العديد من الملفات التي لا يمكن تغيير حجمها.

 grep "vorpal" verse-1.txt verse-2.txt verse-3.txt verse-4.txt verse-5.txt verse-6.txt 

البحث من خلال قائمة الملفات المسماة

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

لتقليل الكتابة يمكننا استخدام أحرف البدل. لكن هذا يمكن أن يكون غير بديهي. يبدو أن هذا يعمل.

 grep "vorpal" * .txt 

استخدام أحرف البدل للبحث في مجموعة من الملفات

ومع ذلك ، يوجد في هذا الدليل ملفات TXT أخرى ، لا علاقة لها بالقصيدة. إذا بحثنا عن كلمة "سيف" بنفس بنية الأوامر ، فإننا نحصل على الكثير من الإيجابيات الخاطئة.

 grep "السيف" * .txt 

البحث عن "سيف" من خلال مجموعة من ملفات TXT

يتم إخفاء النتائج التي نريدها من خلال طوفان من النتائج الخاطئة من الملفات الأخرى التي لها امتداد TXT.

مجموعة كبيرة من النتائج من الإيجابيات الكاذبة

لم تتطابق كلمة "vorpal" مع أي شيء ، ولكن تم تضمين كلمة "sword" في كلمة "password" ، لذلك تم العثور عليها عدة مرات في بعض ملفات السجل الزائفة.

نحن بحاجة إلى استبعاد هذه الملفات. للقيام بذلك ، سنستخدم الخيار --exclude . لاستبعاد ملف واحد يسمى "vol-log-1.txt" سنستخدم هذا الأمر:

 grep --exclude = vol-log-1.txt "sword" * .txt

في هذه الحالة ، نريد استبعاد ملفات سجلات متعددة بأسماء تبدأ بـ "المجلد". الصيغة التي نحتاجها هي:

 grep --exclude = vol * .txt "sword" * .txt 

استبعاد الملفات ذات أحرف البدل

عندما نستخدم الخيار -R (dereference-recursive) ، فإن grep سيبحث لنا عن أشجار الدليل بالكامل. بشكل افتراضي ، سيبحث في جميع الملفات في تلك المواقع. قد تكون هناك أنواع متعددة من الملفات التي نرغب في استبعادها.

أسفل الدليل الحالي على جهاز الاختبار هذا ، توجد أدلة متداخلة تحتوي على ملفات السجل وملفات CSV وملفات MD. هذه هي جميع أنواع الملفات النصية التي نريد استبعادها. يمكننا استخدام خيار --exclude لكل نوع ملف ، ولكن يمكننا تحقيق ما نريده بشكل أكثر كفاءة من خلال تجميع أنواع الملفات.

يستثني هذا الأمر جميع الملفات التي لها امتدادات CSV أو MD ، وجميع ملفات TXT التي تبدأ أسماؤها إما بـ "vol" أو "log".

 grep -R --exclude = *. {csv، md} --exclude = {vol *، log *}. txt "sword" / home / dave / data / 

استخدام جمل - استبعاد متعددة وتجميعات اسم الملف

باستثناء الدلائل

إذا كانت الملفات التي نريد تجاهلها موجودة في أدلة ولا توجد ملفات في تلك المجلدات نريد البحث عنها ، فيمكننا استبعاد تلك المجلدات بالكامل.

هذا المفهوم مشابه جدًا لمفهوم استبعاد الملفات ، باستثناء أننا نستخدم الخيار --exclude-dir وتسمية الدلائل المراد تجاهلها.

 grep -R --exclude-dir = نسخ احتياطي "vorpal" / home / dave / data 

استبعاد دليل من البحث

لقد استبعدنا دليل "backup" ، لكننا ما زلنا نبحث في دليل آخر يسمى "backup2".

لن يكون من المفاجئ أنه يمكننا استخدام الخيار --exclude-dir عدة مرات في أمر واحد. لاحظ أنه يجب إعطاء المسار إلى الدلائل المستبعدة بالنسبة للدليل الذي سيبدأ البحث فيه. لا تستخدم المسار المطلق من جذر نظام الملفات.

 grep -R --exclude-dir = backup --exclude-dir = backup2 "vorpal" / home / dave / data 

استبعاد دليلين من البحث

يمكننا استخدام المجموعات أيضًا. يمكننا تحقيق نفس الشيء بإيجاز أكبر من خلال:

 grep -R --exclude-dir = {backup، backup2} "vorpal" / home / dave / data 

استبعاد الدلائل مع التجميع

يمكنك الجمع بين استثناءات الملفات والدليل في نفس الأمر. إذا كنت تريد استبعاد جميع الملفات من دليل واستبعاد أنواع معينة من الملفات من الدلائل التي يتم البحث عنها ، فاستخدم بناء الجملة هذا:

 grep -R --exclude = *. {csv، md} --exclude-dir = backup / archive "frumious" / home / dave / data 

استبعاد أنواع الملفات والدلائل في نفس الأمر

في بعض الأحيان يكون هذا هو ما تتركه

في بعض الأحيان مع grep ، قد تشعر أنك تحاول العثور على إبرة في كومة قش. يحدث فرق كبير لإزالة كومة القش.

ذات صلة: كيفية استخدام التعبيرات العادية (regexes) على Linux