
ripgrep (rg) là một công cụ tìm kiếm trong dòng terminal được thiết kế để thay thế grep truyền thống, đặc biệt phù hợp với môi trường phát triển phần mềm hiện đại sử dụng hệ thống quản lý phiên bản như Git. Với sự kết hợp giữa tốc độ siêu nhanh, khả năng tự động tôn trọng các file bị bỏ qua như .gitignore và hỗ trợ regex hiện đại, ripgrep đã nhanh chóng trở thành lựa chọn thích hợp cho các nhà phát triển khi cần tìm kiếm nhanh trong một lớn lượng file nguồn.

So sánh ripgrep và grep truyền thống: tốc độ, độ chính xác và tính năng
Ripgrep được viết bằng ngôn ngữ Rust và tập trung vào ba mục tiêu chính: tốc độ, độ tin cậy và khả năng cấu hình linh hoạt. Trong khi grep dựa trên các thuật toán tìm kiếm nguyên thuỷ và thường bị chậm khi xử lý thư mục lớn, ripgrep áp dụng nhiều tối ưu hiện đại để vượt trội trong thực tế. Bảng dưới đây tóm tắt những điểm khác biệt nổi bật giữa hai công cụ.
| Tiêu chí | Grep truyền thống | Ripgrep |
|---|---|---|
| Tìm kiếm mặc định | Chỉ thư mục hiện tại (cần -r để đệ quy) | Đệ quy tất cả thư mục con, tự động bỏ qua .gitignore, .ignore, .rgignore |
| Phát hiện file nhị phân | Kiểm tra toàn bộ file (chậm) | Sử dụng memory mapping (mmap) khi có lợi để chỉ đọc vài KB đầu và tìm byte NUL |
| Tối ưu literal search | Không có | Trích xuất tiền tố/hậu tố + SIMD-accelerated memchr |
| Song song xử lý | Không | Thread pool với Chase-Lev work-stealing queue (mặc định bật) |
| Bỏ qua file không mong muốn | Cần chỉ định đường dẫn hoặc dùng find + xargs | RegexSet từ ignore crate kiểm tra hàng ngàn globs trong một lần duyệt |
Ripgrep tự động tôn trọng các file bị bỏ qua
Một trong những điểm mạnh lớn nhất của ripgrep là khả năng tự động phát hiện và bỏ qua các file được liệt kê trong các file cấu hình như .gitignore, .ignore (có mức ưu tiên cao hơn ở thư mục cha) và .rgignore (mức ưu tiên cao nhất). Điều này được thực hiện bằng cách đọc các file cấu hình từ thư mục hiện tại lên tới thư mục gốc và xây dựng một RegexSet tổng hợp. Nhờ vậy, khi chạy rg 'pattern' . trong một dự án Git, ripgrep sẽ tự động bỏ qua:
- Thư mục
.git/và tất cả nội dung bên trong - Các file được liệt kê trong
.gitignoretại thư mục hiện tại và các thư mục cha - Các file tạm thời được tạo ra bởi trình xây dựng (build) như
*.o,*.class,*.exe - Các file log hoặc file cấu hình IDE (ví dụ:
.vscode/,.idea/)

Trong quá trình duyệt thư mục, ripgrep không đơn giản chỉ chạy qua từng mục con mà sắp xếp công việc tìm kiếm dựa trên chế độ song song. Mỗi luồng công nhân nhận một phần thư mục để xử lý, sau đó kết quả được gộp lại và sắp xếp nếu cần. Khi người dùng chỉ định --sort path, ripgrep sẽ tắt tính năng song song và trả về kết quả theo thứ tự đường dẫn tuyệt đối, hữu ích khi cần tạo ra file log có thứ tự ổn định.
Các tuỳ chọn linh hoạt để điều chỉnh tìm kiếm
Ripgrep cung cấp hàng tá tuỳ chọn để tinh chỉnh hành vi tìm kiếm theo nhu cầu cụ thể. Một số ví dụ thường gặp bao gồm:
-t/--typevà-T: tìm kiếm chỉ trong một loại file cụ thể (ví dụ:-t pycho file Python) hoặc loại trừ một loại file (-T py)-z/--search-zip: tìm kiếm bên trong các file nén (gzip, bzip2, xz, zstd, lz4, lzma, brotli) mà không cần giải nén trước--ignore-file: chỉ định file chứa các mẫu bổ sung cần bỏ qua (ví dụ:.customignoređể loại trừ file log rotate)--max-depth: giới hạn độ sâu tìm kiếm thư mục (ví dụ:--max-depth 3chỉ duyệt ba cấp thư mục)--type-not: kết hợp với-tđể loại trừ một loại file cụ thể khỏi kết quả (ví dụ:--type-not 'markdown'để tìm trong mọi file ngoại trừ Markdown)--no-mmap: buộc đọc toàn bộ file thay vì sử dụng memory mapping (hữu ích trên một số hệ thống có lỗi mmap)--binary: sau khi gặp byte NUL, tiếp tục tìm kiếm trong phần còn lại của file thay vì dừng lại

Ứng dụng thực tế trong phát triển phần mềm
Ripgrep không chỉ là công cụ kiểm tra lỗi nhanh mà còn được tích hợp sâu vào quy trình làm việc hàng ngày của các nhà phát triển. Dưới đây là một số trường hợp sử dụng thực tế:
- Refactoring code: tìm tất cả nơi xuất hiện một tên hàm hoặc biến để thay đổi một cách nhất quán (ví dụ:
rg 'old_function_name' .) - Kiểm tra bảo mật: quét tìm các chuỗi nhạy cảm như API key, mật khẩu, token trong source code và file cấu hình (ví dụ:
rg --type-add 'secret:*.env' -t secret 'password|secret|key' .) - Phân tích log: tìm các dòng lỗi hoặc cảnh báo trong file log xoay vòng (ví dụ:
rg -i 'error|fail|exception' *.log) - Tích hợp với trình soạn thảo: các plugin như
ripgrep-rgcho Vim/Neovim hoặcvscode-ripgrepcho VS Code cho phép tìm kiếm tức thời trong dự án mà không cần rời khỏi môi trường viết code.
