Вы можете использовать grepинструмент для рекурсивного поиска текущей папки с -rпараметром, например:
grep -r "pattern" .
Примечание: -r- Рекурсивно ищите подкаталоги.
Для поиска в определенных файлах вы можете использовать синтаксис типа:
grep "class foo" **/*.c
Примечание. Используя параметр globbing ( **), он рекурсивно сканирует все файлы с определенным расширением или шаблоном. Чтобы включить этот синтаксис, выполните следующую команду: shopt -s globstar. Вы также можете использовать **/*.*для всех файлов (за исключением скрытых и без расширения) или любой другой шаблон.
Если вы ошиблись в том, что ваш аргумент слишком длинный, попробуйте сузить область поиска или используйте findвместо этого такой синтаксис, как:
find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
Альтернативно использовать ripgrep.
Если вы работаете над большими проектами или большими файлами, вы должны использовать ripgrepвместо этого, например:
rg "pattern" .
Ознакомьтесь с документами, инструкциями по установке или исходным кодом на странице проекта GitHub .
Это гораздо быстрее , чем любой другой инструмент , как GNU / BSD grep , ucg, ag, sift, ack, ptили подобного, так как он построен на вершине регулярных выражений Руста , который использует конечные автоматы, SIMD и агрессивные буквенные оптимизации , чтобы сделать поиск очень быстро.
Он поддерживает шаблоны игнорирования, указанные в .gitignoreфайлах, поэтому один путь к файлу можно сопоставить с несколькими шаблонами глобуса одновременно.
Вы можете использовать общие параметры, такие как:
-i - Нечувствительный поиск.
-I - игнорировать двоичные файлы.
-w - Поиск целых слов (в отличие от частичного совпадения слов).
-n - Показать линию вашего матча.
-C/ --context(например -C5) - Увеличивает контекст, поэтому вы видите окружающий код.
--color=auto - Отметьте соответствующий текст.
-H - Отображает имя файла, где находится текст.
-c- Отображает количество совпадающих линий. Может сочетаться с -H.