يُعتبر أمر rg (اختصار لـ ripgrep) واحدًا من أكثر الأدوات فاعلية وحداثة في عالم البحث النصي داخل أنظمة التشغيل لينكس ويونكس. يُنظر إليه على نطاق واسع كبديل متفوق لأمر grep الشهير، إذ يجمع بين السرعة الفائقة، والمرونة الكبيرة، والدقة العالية. يعتمده المطورون ومسؤولو الأنظمة على حد سواء في مشاريعهم اليومية، خصوصًا في التعامل مع مستودعات ضخمة من الشيفرة المصدرية أو الملفات النصية. هذا المقال يقدم شرحًا شاملًا وعميقًا لأمر rg، مع إبراز نقاط قوته، كيفية استخدامه، المقارنة مع grep، واستراتيجيات متقدمة للاستفادة القصوى منه.
ما هو ripgrep (rg)؟
ripgrep هو أداة سطر أوامر مفتوحة المصدر تم تطويرها بلغة Rust، وتتميز بأنها تقوم بالبحث في الملفات النصية باستخدام تعبيرات نمطية (Regular Expressions) مع أداء أسرع بكثير من grep أو ack أو ag في معظم السيناريوهات.
تم تصميم rg ليكون سهل الاستخدام، ذكيًا في اكتشاف أنواع الملفات، ويتجاهل الملفات والمجلدات التي لا يجب البحث فيها (مثل تلك الموجودة في .gitignore).
الفرق بين grep و rg
| الخاصية | grep | ripgrep (rg) |
|---|---|---|
| السرعة | أبطأ في البحث عبر مجلدات ضخمة | أسرع بكثير |
| الاستثناءات | يتطلب إعدادات يدوية | يتجاهل ملفات .gitignore تلقائيًا |
| دعم UTF-8 | محدود في الإصدارات القديمة | دعم كامل |
| التعبيرات النمطية | نعم | نعم |
| دعم الألوان | متاح | متاح بشكل افتراضي |
| التثبيت | مثبت مسبقًا عادة | يحتاج إلى تثبيت يدوي |
كيفية تثبيت ripgrep في لينكس
على توزيعات Debian/Ubuntu:
bashsudo apt update sudo apt install ripgrep
على توزيعات Arch Linux:
bashsudo pacman -S ripgrep
على Fedora:
bashsudo dnf install ripgrep
عبر Snap:
bashsudo snap install ripgrep
بعد التثبيت، يتم استخدام الأمر rg مباشرة في سطر الأوامر.
استخدامات أساسية لأمر rg
البحث عن كلمة داخل الملفات
bashrg "كلمة"
يعرض هذا الأمر كل الأسطر التي تحتوي على الكلمة في الملفات داخل المجلد الحالي وما تحته.
البحث في نوع ملفات محدد
bashrg "mysql_connect" --type php
يبحث هذا المثال عن عبارة “mysql_connect” داخل ملفات PHP فقط.
البحث باستخدام نمط (Regex)
bashrg "user\_\d+"
يُظهر هذا المثال كل الأسطر التي تحتوي على أسماء مستخدمين مثل user_1, user_23 وهكذا.
تجاهل ملفات معينة
bashrg "api_key" --glob "!config/*.env"
هذا المثال يبحث عن كلمة “api_key” مع استثناء الملفات التي تنتهي بـ .env داخل مجلد config.
ميزات متقدمة في rg
تحديد عدد الأسطر قبل وبعد النتيجة
bashrg "خطأ" -C 3
يُظهر ثلاث أسطر قبل وبعد كل نتيجة.
البحث في ملفات مخفية
bashrg "سر" --hidden
افتراضيًا، لا يبحث rg في الملفات المخفية، ويجب استخدام --hidden لتضمينها.
البحث ضمن الملفات الثنائية (binary)
bashrg --text "PDF"
بعض الملفات الثنائية يتم تجاهلها تلقائيًا. باستخدام --text يمكن تضمينها.
عرض عدد النتائج فقط
bashrg -c "class"
يعرض عدد المرات التي ظهرت فيها الكلمة في كل ملف على حدة.
استخدام ملفات الإعدادات
يدعم rg استخدام ملف إعدادات لتحديد الخيارات الافتراضية عند كل استخدام. يمكن إنشاء ملف في المسار التالي:
bash~/.ripgreprc
مثال على محتوى الملف:
diff--hidden
--ignore-case
--glob=!.git
--colors=line:style:bold
التكامل مع أدوات أخرى
التكامل مع Vim و Neovim
يمكن استخدام ripgrep مع Vim عبر المكون الإضافي fzf.vim:
vim:Rg كلمة_البحث
التكامل مع VS Code
يدعم محرر Visual Studio Code استخدام ripgrep تلقائيًا في واجهة البحث الخاصة به، مما يوفر أداء عاليًا في المشاريع الكبيرة.
مقارنة الأداء مع أدوات أخرى
قامت اختبارات الأداء التالية بمقارنة rg مع grep و ag و ack:
| الأداة | الوقت المستغرق للبحث في مشروع يحتوي على 50,000 ملف |
|---|---|
| grep | 12 ثانية |
| ack | 7 ثوانٍ |
| ag | 5 ثوانٍ |
| rg | 1.2 ثانية |
هذا يثبت تفوق ripgrep في الأداء، خاصةً في المشاريع الكبيرة والمعقدة.
أمثلة عملية في البيئات البرمجية
البحث عن استدعاءات دالة في مشروع جافاسكريبت:
bashrg "fetch\("
البحث عن أخطاء أو استثناءات في ملفات اللوج:
bashrg "Exception|Error" /var/log/
استخراج الإيميلات من ملف نصي:
bashrg -o "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}"
فوائد أمنية واحترافية
-
البحث الآمن:
rgيتجنب بشكل افتراضي البحث في الملفات الثنائية الحساسة. -
إخفاء النتائج الخاصة: باستخدام
--globيمكن إخفاء ملفات كلمات المرور أو التكوين. -
إعداد تقارير دقيقة: عبر خيارات التنسيق، يمكن بناء تقارير بحث لتقديمها أو أرشفتها.
حالات استخدام مثالية
| السيناريو | استخدام rg المناسب |
|---|---|
| البحث عن كلمة في مشروع كبير | rg "كلمة" |
| استثناء ملفات معينة | rg "token" --glob "!.env" |
| استخدام في CI/CD | إدماج rg في سكربتات لفحص الشيفرة تلقائيًا |
| تصفية مخرجات بحث | `rg “TODO” |
الخلاصة
يمثل ripgrep نقلة نوعية في أدوات البحث النصي على نظام لينكس، حيث يجمع بين سهولة الاستخدام وقوة الأداء. ومع الدعم الواسع للتخصيص والتكامل مع بيئات التطوير، فإنه يُعد أداة لا غنى عنها في ترسانة أي مطور أو مدير نظام. استخدامه يعزز من الإنتاجية ويقلل الوقت المستغرق في البحث عن المعلومات داخل الملفات، كما يساعد في تحسين أمان الشيفرة وتنظيم العمليات التطويرية.
المراجع:

