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

تعلم استخدام الأمر rg بديل grep المحسن في لينكس


Hassan Hedr

طوُّرت أداة ripgrep نتيجةً لجهود مطوري البرامج مفتوحة المصدر ضمن حملة لإعادة كتابة البرامج بلغة رست Rust كبديل أقوى عن الأداة المعروفة grep،صيغة استخدامها كالتالي:

rg [files/folders] <pattern>

مع استبدال files/folders بأسماء الملفات أو المجلدات المُراد البحث ضمنها، وهو معامل اختياري، واستبدال pattern بنمط البحث الذي نحاول العثور على نتائج تطابقه.

نلاحظ وخلافًا للأمر grep، أن ذكر اسم ملف ليتم البحث ضمنه هو اختياري وغير ضروري، فعند عدم تمرير اسم ملف معين سيُبحث ضمن جميع الملفات، تفيد تلك الميزة عند نسيان أيّ من الملفات يحوي النمط الذي نبحث عنه، وهي طريقة أبسط بمقارنتها بتنفيذ نفس العملية باستخدام grep.

ما هي أداة ripgrep؟

هي أداة مُطابقة أنماط قياسية متكررة تأخذ بالحسبان ملفات gitignore. في حال وجود ذكر لملفات معينة أو لواحق أو مجلدات ضمن ملف gitignore. ستتجاهلها الأداة ripgrep، مما يُسرّع زمن تنفيذ عملية البحث، ومن مزايا أداة ripgrep:

  • البحث عن الأنماط تكراريًا ضمن المجلدات.
  • تلوين المُطابقات ضمن الخرج.
  • دعم للعديد من صيغ الترميز مثل UTF-8 و SHIFT_JIS.
  • القدرة على البحث ضمن الملفات المضغوطة zip.
  • تجاهل الملفات المخفية افتراضيًا، والملفات المطابقة للأنماط ضمن ملف gitignore لتسريع عملية البحث.

فهي أداة مشابهة تمامًا لأداة grep، لكنها موجهة للبحث ضمن محتوى الملفات بدلًا من البحث ضمن مجرى من البايتات.

تثبيت ripgrep

لا تأتي أداة ripgrep مثبتة مسبقًا ضمن نظام التشغيل كما هو الحال مع grep، ولكنها متاحة ضمن كافة المستودعات ضمن توزيعات لينكس الشهيرة، بحيث يمكن تثبيتها باستخدام مدير الحزم، فضمن توزيعة لينكس Arch يمكن تثبيتها بتنفيذ الأمر التالي:

pacman -S ripgrep

وضمن جينتو Gentoo باستخدام الأمر:

emerge sys-apps/ripgrep

وعلى توزيعات فيدورا وريد هات بتنفيذ الأمر التالي:

sudo dnf install ripgrep

وضمن توزيعة أوبن سوزي إصدار 15.1 وما فوق بتنفيذ الأمر:

sudo zypper install ripgrep

وضمن توزيعة ديبيان Buster الإصدار 10 وما فوق باستخدام apt، ويمكن ضمن توزيعة أوبنتو Cosmic Cuttlefish إصدار 18.10 وما فوق تحميلها من المستودعات الرسمية للتوزيعة، باستخدام الأمر:

sudo apt install ripgrep

استخدام الأمر ripgrep

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

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

المثال التالي يبحث عن النص description ضمن محتوى الملف Cargo.html:

$ rg description Cargo.toml
3:description = "A more intuitive version of du"
53:extended-description = """\

فبعد تنفيذ الأمر بحثت لنا الأداة ضمن الملف المذكور وعرضت الأسطر مع أرقامها التي حَوت مُطابقة مع نص البحث:

عمليات البحث البسيطة في ripgrep

عند تمرير أسماء لعدة ملفات للبحث ضمنها، أو عند عدم تمرير أسماء ملفات ما يعني البحث ضمن جميع الملفات، سيظهر ضمن الخرج أسماء الملفات التي عُثر ضمنها على مطابقات:

نموذج عن عمليات البحث البسيطة في ripgrep

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

الاستفادة من الخيار file في عمليات البحث في ripgrep

إظهار نتيجة البحث ضمن السياق

من المفيد والضروري أحيانًا عرض السياق الذي عُثر ضمنه على النتيجة، خصوصًا عند بحثنا ضمن مستودع أو ملفات تحوي شيفرات، نستفيد من الخيار C- أو context-- لتمرير عدد يدل على عدد الأسطر التي نريد إظهارها قبل وبعد النتيجة:

إظهار نتيجة البحث ضمن السياق باستخدام الأمر ripgrep

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

كيفية إظهار نتيجة البحث ضمن السياق باستخدام ripgrep

ولإظهار الأسطر فوق النتيجة يمكن الاستفادة من الخيار B- أو before-context-- وتمرير عدد الأسطر الواجب إظهارها فوق كل نتيجة:

إظهار نتيجة البحث ضمن السياق باستخدام الأمر ripgrep

الأعمدة

يوفر ripgrep عدة خيارات تخص الأعمدة، منها الخيار column-- لطباعة إحداثيات مكان النتيجة بالصيغة "رقم السطر:رقم العمود" في بداية سطر كل نتيجة، ما يفيدنا في حال استخدامنا لمحرر نصوص مثل vim:

خيارات الأعمدة في ripgrep

يوجد أيضًا الخيار M- أو max-columns-- الذي يأخذ قيمة عددية تمثل عدد الأعمدة ضمن الخرج، وفي حال تجاوزت نتيجة ما في أعمدتها ذلك العدد، يتم تجاهل عرضها والاكتفاء بعرض رسالة توضيحية تعبر عن النتيجة:

خيارات الأعمدة في ripgrep

خيارات أخرى

يوجد العديد من الخيارات الممكن استخدامها مع الأمر ripgrep، مثلًا يمكن استخدام الخيار s- أو case-sensitive-- لجعل عملية المطابقة حساسة لحالة الأحرف:

خيارات يمكن استخدامها في ripgrep

وإذا أردنا إظهار كل النتائج وتجاهل حالة الأحرف يمكن استخدام الخيار i- أو ignore-case--:

نتائج خيارات يمكن استخدامها في ripgrep

يمكن استخدام عدة مسالك Threads معًا لتنفيذ عملية البحث، حيث يفيد ذلك عند البحث ضمن كمية كبيرة من الملفات، كمستودع كبير للشيفرة المصدرية، يمكن تحديد عدد المسالك المستخدمة في عملية البحث بتمرير عدد للخيار j- أو threads--:

$ rg -j 4 TODO

لعكس نتيجة البحث أي استثناء نمط ما من نتائج البحث، يمكن استخدام الخيار v- أو invert-match--.

خيارات يمكن استخدامها في ripgrep

يمكن للأداة ripgrep البحث ضمن الملفات النصية المٌحتواه داخل ملف أرشيف مضغوط باستخدام الخيار z- أو search-zip-- عادة يستخدم ذلك الخيار مع الخيار a- لمعاملة الملفات الثنائية على أنها ملفات نصية:

البحث باستخدام الخيار z- أو search-zip--

في الختام

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

ترجمة -وبتصرف- للمقال Using ripgrep (rg) Command in Linux لفريق الموقع.

اقرأ أيضًا


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

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

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



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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.


×
×
  • أضف...