ابزار ripgrep چیست و چرا جستجوی فایل‌ها را دگرگون کرد
معرفی ابزار

ابزار ripgrep چیست و چرا جستجوی فایل‌ها را دگرگون کرد

ابزار ripgrep با تکیه بر سرعت موتور زبان راست و نادیده گرفتن خودکار فایل‌های پنهان، جستجوی الگوهای متنی در پروژه‌های بزرگ را چند برابر سریع‌تر از grep سنتی می‌کند.

تحریریه‌ی دینا کد
نویسنده
۴ دقیقه مطالعه۰ بازدید
اشتراک گذاری۰
فهرست مطالب
  1. ۱ابزار ripgrep چه می‌کند
  2. ۲چه کسانی به ripgrep نیاز دارند
  3. ۳روش نصب ripgrep
  4. ۴اجرای اولین دستور و بررسی خروجی
  5. ۵چه چیزهایی را تغییر می‌دهد
  6. ۶محدودیت‌های واقعی ابزار

هنگام کار روی پروژه‌های بزرگ، جستجوی یک کلمه یا تابع در میان هزاران فایل سورس‌کد با ابزارهای قدیمی اغلب معطل‌کننده می‌شود. اگر دستور grep را اجرا کنید، سیستم تمام پوشه‌های سنگین مثل node_modules یا تاریخچه .git را هم اسکن می‌کند و خروجی شلوغی تحویل می‌دهد. ابزار ripgrep که در ترمینال با نام rg اجرا می‌شود، دقیقاً برای حل همین کندی و حذف نتایج اضافه توسعه یافته است.

ابزار ripgrep چه می‌کند

ابزار ripgrep یک ابزار خط فرمان است که دایرکتوری‌ها را به شکل بازگشتی برای پیدا کردن الگوهای عبارات باقاعده (Regex) جستجو می‌کند. نقطه قوت اصلی آن، رعایت خودکار قوانین فایل .gitignore است. یعنی نیازی نیست دستورهای پیچیده‌ای برای مستثنی کردن پوشه‌های بیلد، کش یا پکیج‌ها بنویسید؛ ripgrep همان فایل‌هایی را نادیده می‌گیرد که از دید گیت پنهان کرده‌اید. علاوه بر این، فایل‌های باینری و فایل‌های مخفی به طور پیش‌فرض خوانده نمی‌شوند تا کار متوقف نماند.

چه کسانی به ripgrep نیاز دارند

توسعه‌دهندگانی که پروژه‌های چند ده‌هزار خطی دارند، مدیران سرور که در لاگ‌های سنگین متن جستجو می‌کنند و کاربرانی که از ویرایشگرهایی مثل نئو‌وییم و ایمکس به عنوان محیط توسعه استفاده می‌کنند، بیشترین بهره را از این ابزار می‌برند. اگر در طول روز بارها مجبور می‌شوید در ساختار کد دنبال نام کلاس، تعریف متغیر یا کلیدهای پیکربندی بگردید، این برنامه زمان پاسخ ترمینال را به کسری از ثانیه کاهش می‌دهد.

روش نصب ripgrep

این ابزار با زبان راست پیاده‌سازی شده و برای تمام سیستم‌عامل‌های اصلی بسته‌های آماده دارد. در لینوکس توزیع اوبونتو و دبیان می‌توانید از مدیر بسته پیش‌فرض استفاده کنید:

bashsudo apt install ripgrep

در مک با ابزار Homebrew:

bashbrew install ripgrep

در ویندوز با مدیر بسته Chocolatey یا Scoop:

powershellchoco install ripgrep

توسعه‌دهندگانی هم که زنجیره ابزار زبان راست را دارند، می‌توانند آن را مستقیماً از رجیستری Crates کامپایل کنند:

bashcargo install ripgrep

اگر به معماری و چگونگی دستیابی به چنین سرعتی در زبان راست علاقه دارید، دوره راست از صفر تا برنامه‌نویس پایه‌های حافظه امن و همروندی این زبان را بررسی می‌کند.

اجرای اولین دستور و بررسی خروجی

برای جستجوی یک واژه در پروژه جاری، کافی است دستور rg را همراه کلمه موردنظر تایپ کنید:

bashrg findUser

خروجی به طور خودکار نام فایل و شماره خط را با رنگ‌بندی تفکیک می‌کند:

textsrc/controllers/user.ts
۴۲:  const result = await findUser(userId);

src/services/auth.ts
۱۸:export function findUser(id: string) {

اگر بخواهید فایل‌های نادیده‌گرفته‌شده یا مخفی را هم بررسی کنید، فلگ -u یا --unrestricted این فیلترها را برمی‌دارد. برای جستجوی عبارت بدون حساسیت به حروف بزرگ و کوچک، آرگومان -i اضافه می‌شود.

چه چیزهایی را تغییر می‌دهد

بزرگ‌ترین تفاوت ripgrep با ابزارهای نسل قبل در موتور جستجوی موازی و نحوه خواندن حافظه نهفته است. در grep سنتی برای جستجوی بازگشتی و نادیده گرفتن فایل‌های گیت، باید ترکیب خط لوله‌ای از find، آرگومان‌های exclusion و grep می‌نوشتید که اجرای آن به پردازش تک‌رشته‌ای محدود بود. ripgrep به صورت پیش‌فرض تمام هسته‌های پردازنده را به کار می‌گیرد و از ساختارهای بهینه‌سازی‌شده Regex استفاده می‌کند.

محدودیت‌های واقعی ابزار

با وجود مزایای فنی، ripgrep جایگزین کامل تمام رفتارهای ابزارهای کلاسیک یونیکس نمی‌شود. این ابزار برای پردازش استریم‌های متنی نامحدود پایپ مناسب نیست و در سیستم‌های امبدد بسیار قدیمی که بسته‌های مدرن را پشتیبانی نمی‌کنند، در دسترس نخواهد بود. همچنین رفتار پیش‌فرض آن در نادیده گرفتن فایل‌های پنهان ممکن است گاهی شما را به اشتباه بیندازد؛ به عنوان مثال اگر متنی داخل یک فایل .env باشد، تا زمانی که فلگ --hidden را نگذارید، آن را به عنوان نتیجه به شما نشان نمی‌دهد.

تحریریه‌ی دینا کد
نویسنده

نظرها

اولین نفری باشید که نظر می‌دهد
برای ثبت نظر وارد شوید

سؤالتان را بپرسید یا تجربه‌تان را بنویسید تا نویسنده‌ی مطلب پاسخ بدهد.

مطالب مرتبط

از همین دسته
ripgrep چیست و چرا از grep سریع‌تر است — دینا کد