طوُّرت أداة 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 = """\
فبعد تنفيذ الأمر بحثت لنا الأداة ضمن الملف المذكور وعرضت الأسطر مع أرقامها التي حَوت مُطابقة مع نص البحث:
عند تمرير أسماء لعدة ملفات للبحث ضمنها، أو عند عدم تمرير أسماء ملفات ما يعني البحث ضمن جميع الملفات، سيظهر ضمن الخرج أسماء الملفات التي عُثر ضمنها على مطابقات:
يمكن الاستفادة من استخدام الخيار file--
للإشارة إلى ملف يحوي أكثر من نمط ليتم البحث عنها، قد نحتاج ذلك في حال كنا نكرر البحث عن عدة أنماط دومًا:
إظهار نتيجة البحث ضمن السياق
من المفيد والضروري أحيانًا عرض السياق الذي عُثر ضمنه على النتيجة، خصوصًا عند بحثنا ضمن مستودع أو ملفات تحوي شيفرات، نستفيد من الخيار C-
أو context--
لتمرير عدد يدل على عدد الأسطر التي نريد إظهارها قبل وبعد النتيجة:
نحتاج أحيانًا لعرض سطر النتيجة وما فوقه، ونحتاج أحيانًا أخرى لعرض سطر النتيجة وما بعده فقط، يمكن الاستفادة من الخيار A-
أو after-context--
وتمرير عدد الأسطر الواجب إظهارها أسفل كل نتيجة:
ولإظهار الأسطر فوق النتيجة يمكن الاستفادة من الخيار B-
أو before-context--
وتمرير عدد الأسطر الواجب إظهارها فوق كل نتيجة:
الأعمدة
يوفر ripgrep عدة خيارات تخص الأعمدة، منها الخيار column--
لطباعة إحداثيات مكان النتيجة بالصيغة "رقم السطر:رقم العمود" في بداية سطر كل نتيجة، ما يفيدنا في حال استخدامنا لمحرر نصوص مثل vim:
يوجد أيضًا الخيار M-
أو max-columns--
الذي يأخذ قيمة عددية تمثل عدد الأعمدة ضمن الخرج، وفي حال تجاوزت نتيجة ما في أعمدتها ذلك العدد، يتم تجاهل عرضها والاكتفاء بعرض رسالة توضيحية تعبر عن النتيجة:
خيارات أخرى
يوجد العديد من الخيارات الممكن استخدامها مع الأمر ripgrep، مثلًا يمكن استخدام الخيار s-
أو case-sensitive--
لجعل عملية المطابقة حساسة لحالة الأحرف:
وإذا أردنا إظهار كل النتائج وتجاهل حالة الأحرف يمكن استخدام الخيار i-
أو ignore-case--
:
يمكن استخدام عدة مسالك Threads معًا لتنفيذ عملية البحث، حيث يفيد ذلك عند البحث ضمن كمية كبيرة من الملفات، كمستودع كبير للشيفرة المصدرية، يمكن تحديد عدد المسالك المستخدمة في عملية البحث بتمرير عدد للخيار j-
أو threads--
:
$ rg -j 4 TODO
لعكس نتيجة البحث أي استثناء نمط ما من نتائج البحث، يمكن استخدام الخيار v-
أو invert-match--
.
يمكن للأداة ripgrep البحث ضمن الملفات النصية المٌحتواه داخل ملف أرشيف مضغوط باستخدام الخيار z-
أو search-zip--
عادة يستخدم ذلك الخيار مع الخيار a-
لمعاملة الملفات الثنائية على أنها ملفات نصية:
في الختام
يمكن الاستفادة من الأداة ripgrep بشكل كبير، وخاصة لو كنت مبرمجًا تعمل على أنظمة تشغيل ببيئات شبيهة بيونكس، مع أنها لا تعتبر بديلًا عن الأداة grep
لأن وظيفتها مختلفة، حيث لكل منهما استخداماته وتطبيقاته المفيدة.
ترجمة -وبتصرف- للمقال Using ripgrep (rg) Command in Linux لفريق الموقع.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.