اذهب إلى المحتوى

تعد Grep الأداة الأفضل للبحث ضمن محتوى الملفات في نظام التشغيل لينكس، حيث لها استخدامات عديدة، ومن أشيع تلك الاستخدامات هو البحث ضمن ملف ما عن مصطلح، بالصيغة التالية:

grep search_term filename

وللبحث ضمن جميع الملفات ضمن مجلد ما يمكن تنفيذ الأمر كالتالي:

grep search_term *

المشكلة هنا أن عملية البحث ستتم على الملفات ضمن المجلد الحالي فقط، ولن يتم البحث ضمن المجلدات الفرعية له، يمكن حل تلك المشكلة بإجبار البحث ضمن كل الملفات وكل المجلدات الفرعية تكراريًا باستخدام الخيار r- كالتالي:

grep -r search_term . 

يمكن ذكر اسم المجلد المراد البحث ضمنه بشكل صريح أيضًا في حال لم يكن هو المجلد الحالي كالتالي:

grep -r search_term directory_path

سنوضح استخدامات grep من خلال أمثلة عملية ضمن الفقرة التالية.

البحث ضمن جميع ملفات مجلد ما

يوضح خرج الأمر tree التالي بنية الملفات والمجلدات التي سنطبق عليها الأمثلة في هذا المقال، بحيث تحوي جميع الملفات الموضحة عبارة "simple"، فيما عدا الملف empty.txt فهو فارغ:

abhishek@LHB:~/scripts$ tree
.
├── dir1
   └── new_script.sh
├── dir2
   └── your_script.sh
├── dir3
   ├── empty.txt
   └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh

3 directories, 6 files

يمكننا استخدام محرف البدل ("*") للبحث عن الكلمة "simple" ضمن جميع الملفات داخل المجلد الحالي، بحيث سيُبدّل محرف البدل بأسماء جميع الملفات والمجلدات داخل المجلد الحالي:

grep simple *

الأمر السابق سيُنفذ عملية البحث ضمن جميع الملفات ضمن المجلد الحالي، ولن يدخل إلى مجلداتها الفرعية، وبما أن البحث سيطبق فقط على الملفات، فسيظهر لنا رسالة بالصيغة التالية "XYZ is a directory" تدل على تجاهل المجلدات بنفسها.

البحث ضمن جميع ملفات مجلد ما عبر grep

في حال لم يكن المجلد الحالي هو ما نريد البحث ضمنه، يمكن ذكر مسار المجلد المطلوب منتهيًا باللاحقة "*/" كالتالي:

grep search_term directory_path/*

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

البحث التكراري ضمن جميع المجلدات الفرعية لمجلد

يمكن استخدام الخيار r- لتفعيل البحث التكراري، بحيث سينظر grep داخل جميع الملفات ضمن المجلد المستهدف وداخل جميع الملفات ضمن المجلدات الفرعية داخله أيضًا، المثال التالي يشابه مثال البحث في الفقرة السابقة لكن مع إضافة البحث التكراري، سنلاحظ ظهور نتائج من ملفات داخل المجلدات الفرعية أيضًا:

grep -r simple .

خرج تنفيذ الأمر السابق:

البحث التكراري ضمن جميع المجلدات الفرعية لمجلد

يوجد أيضًا الخيار R- لتنفيذ البحث التكراري، وهو يعمل بشكل مطابق للخيار r-:

grep -R simple .

الفرق الوحيد بين الخيارين هو أن الخيار R- خيار بحث بإلغاء المرجعية، يعني أنه يقوم باتباع الوصلات الرمزية إلى ملفها الأصلي الموجود في مكان آخر، ويوضح المثال التالي استخدام الخيار R-:

الخيار R- لتنفيذ البحث التكراري

نلاحظ الفرق في نتيجة البحث حيث ظهرت نتيجة ضمن ملف الوصلة الرمزية linked.txt، ولم يظهر لنا ضمن النتائج عند استخدام الخيار r- سابقًا، في حال لم نكن ضمن المجلد المراد البحث ضمنه يمكن ذكر المسار النسبي أو المطلق للمجلد المطلوب كالتالي:

grep -r search_term path_to_directory

استثناء مجلد من عملية البحث التكراري

يمكن توجيه grep لاستثناء البحث ضمن مجلد فرعي ما عند تنفيذ عملية البحث التكراري باستخدام الخيار exclude-dir-- كالتالي:

grep -r --exclude-dir=dir_name serach_term directory_path

يمكننا أيضًا استثناء عدة مجلدات فرعية من البحث التكراري باستخدام الخيار السابق بالصيغة التالية:

grep -r --exclude-dir={dir1,dir2} serach_term directory_path

وبتطبيق ذلك على مثالنا سيظهر الخرج التالي:

استثناء مجلد من عملية البحث التكراري في grep

بحيث يعمل خيار الاستثناء مع كلًّا من خياري البحث التكراري r- و R-.

الخلاصة

الجدول التالي يتضمن خلاصة استخدامات grep للبحث ضمن كل الملفات والمجلدات، والتي شرحناها ضمن هذا المقال:

أمر Grep الوصف
grep string *‎ البحث ضمن كل الملفات ضمن المجلد الحالي
grep string dir البحث ضمن كل الملفات ضمن المجلد dir
grep -r string .‎ البحث التكراري ضمن كل الملفات داخل المجلدات الفرعية
grep -r string dir البحث التكراري ضمن كل الملفات داخل المجلدات الفرعية ضمن المجلد dir
grep -R string .‎ مثل الخيار r- لكن يتبع الوصلات الرمزية

ترجمة -وبتصرف- للمقال How to Perform Grep Search on All Files and in All Directories لصاحبه Abhishek Prakash.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...