Найти в Дзене

ripgrep: grep, который не заставляет ждать

grep хорош, но на больших проектах он тормозит. ripgrep (команда rg`) ищет в 10-20 раз быстрее, умеет игнорировать .gitignore` по умолчанию и выводит результат с контекстом. Фраза «подожди, я сейчас найду где это используется» — это симптом, который лечится заменой инструмента. ➤ Вариант 1 (Поиск по коду проекта): находит все вызовы функции за доли секунды, даже в проекте с 10k файлов.# Найти все вызовы calculate_price во всём проекте rg "calculate_price" # Только в Python-файлах, игнорируя тесты rg -t py "calculate_price" -g "!tests/**" # Найти TODO и показать имя файла и номер строки rg -n "TODO" ➤ Вариант 2 (Поиск с контекстом и подсветкой): видно не только где, но и что было до и после.# Показать 3 строки до и после найденного rg -C 3 "error" logs/application.log # Только имена файлов, где нашлось rg -l "password" --hidden # Подсветка совпадений разными цветами rg --colors 'match:bg:yellow' "TODO" ➤ Вариант 3 (Замена во всех файлах): безопасная замена с предварительны

ripgrep: grep, который не заставляет ждать

grep хорош, но на больших проектах он тормозит. ripgrep (команда rg`) ищет в 10-20 раз быстрее, умеет игнорировать .gitignore` по умолчанию и выводит результат с контекстом.

Фраза «подожди, я сейчас найду где это используется» — это симптом, который лечится заменой инструмента.

➤ Вариант 1 (Поиск по коду проекта): находит все вызовы функции за доли секунды, даже в проекте с 10k файлов.# Найти все вызовы calculate_price во всём проекте

rg "calculate_price"

# Только в Python-файлах, игнорируя тесты

rg -t py "calculate_price" -g "!tests/**"

# Найти TODO и показать имя файла и номер строки

rg -n "TODO"

➤ Вариант 2 (Поиск с контекстом и подсветкой): видно не только где, но и что было до и после.# Показать 3 строки до и после найденного

rg -C 3 "error" logs/application.log

# Только имена файлов, где нашлось

rg -l "password" --hidden

# Подсветка совпадений разными цветами

rg --colors 'match:bg:yellow' "TODO"

➤ Вариант 3 (Замена во всех файлах): безопасная замена с предварительным просмотром.# Сначала посмотреть, что попадёт под замену

rg "old_function" --files-with-matches

# Потом заменить с бекапом

rg "old_function" --files-with-matches | \

xargs sed -i.bak 's/old_function/new_function/g'

ripgrep использует SIMD-инструкции и умные алгоритмы поиска. На проекте с 10k файлов он находит всё за секунду, пока grep ещё думает. И главное - он "уважает" .gitignore, поэтому случайно не залезет в node_modules.

Пробовали ли вы rg или остались верны классическому grep?

P.S. rg отлично дружит с fzf: rg --no-heading "TODO" | fzf — интерактивный поиск по всем TODO в проекте.

👉🏻 Я в Telegram - https://dzen.ru/id/686102a27e39653c3429f77f

👉🏻 Я в VK - vk.com/helcode

👉🏻 Я на Boosty - boosty.to/helcode