Дополнительно
Как сделать grep рекурсивно?
Как рекурсивно grep
все каталоги и подкаталоги?
find . | xargs grep "texthere" *
1613
20
Как рекурсивно grep
все каталоги и подкаталоги?
find . | xargs grep "texthere" *
Первый параметр представляет собой регулярное выражение для поиска, а второй - каталог, в котором будет производиться поиск. В данном случае
.
означает текущий каталог.Примечание: Это работает для GNU grep, а на некоторых платформах, таких как Solaris, вы должны специально использовать GNU grep в отличие от унаследованной реализации. Для Solaris это команда
ggrep
.Если вы знаете расширение или шаблон нужного вам файла, можно воспользоваться опцией
--include
:Вы также можете указать файлы для исключения с помощью
--exclude
.Ag
Если вы часто ищете в коде, Ag (The Silver Searcher) - это гораздо более быстрая альтернатива grep, которая приспособлена для поиска кода. Например, по умолчанию он рекурсивен и автоматически игнорирует файлы и каталоги, перечисленные в
.gitignore
, так что вам не придется передавать громоздкие опции исключения в grep или find.Также:
но
grep -r
- лучший ответ.Я теперь всегда используйте (даже на Windows с Гоу -- GNU на Windows):
Которая включает следующие варианты:
(Примечание: phuclv добавляет в комментариях, что
-Н
снижает производительность много так, так что вы, возможно, захотите пропустить эту опцию)И я могу добавить ' Я' (
-nRHIi
), если я хочу, чтобы регистр результатов.Я могу сделать:
В POSIX систем, вы Дон'т
-р
параметркоманда grep
и свойкоманда grep -РН "по мелочи" и .
выиграл'т бежать, но если вы используетенайти
команды:найти . -тип F -exec для греп -Н "по мелочи" и {} \; -принт`
Согласовано
Солярис
иНР-УБ
.подстановка
**
С помощью команды grep -Р` работает, но это может перебор, особенно в больших папках.
Для более практического использования, вот синтаксис, который использует подстановка синтаксис (
**
):который Грэпс только определенные файлы с выбранным узором. Она работает для всех поддерживаемых оболочек, таких как Баш +4 или ЗШ.
Чтобы активировать эту функцию, выполните:
shopt -с globstar
.Смотрите также: https://stackoverflow.com/q/16956810/55075
в Git команда grep
Для проектов под управления версиями Git, используйте:
что намного быстрее.
ripgrep
Для более крупных проектов, средства быстрое применение grep к это
ripgrep
, который Грэпс файлы рекурсивно по умолчанию:Это'ы построенные на вершине Руст'с регулярное выражение двигателя, который использует метод конечных автоматов, Симд и агрессивных буквальном оптимизацию для поиска очень быстро. Проверьте подробный анализ здесь.
Чтобы найти имя
файлы
спуть
рекурсивно, содержащий конкретное строку, используйте следующую команду для ОС UNIX`:для
Линукс
:найти файл на сервере Unix`
найти файл на сервере Linux
просто имена файлов могут быть слишком полезно
Если вы только хотите следовать актуальным каталогам, а не символические ссылки,
Если вы хотите следовать символическим ссылкам, а также актуальные каталоги (будьте осторожны бесконечной рекурсии),
Поскольку вы'вновь пытается вычленить рекурсивно, следующие параметры могут быть полезны для вас:
Поэтому если вы хотите найти все файлы, содержащие Дарт Вейдер в текущем каталоге и всех подкаталогах и захвата имя файла и номер строки, но не хочу рекурсию, чтобы следовать символическим ссылкам, команда будет
Если вы хотите найти все упоминания о слове кошка в каталоге
и вы'вновь на данный момент в каталоге
и вы хотите, чтобы захватить имя, но не номер строки любой экземпляр строки на "кошках", и вы хотите, чтобы рекурсия следовать символическим ссылкам при их обнаружении, можно выполнить одно из следующих действий
Источник:
работает на "грэп-помощь"и
Краткое введение в символические ссылки, для тех, кто читает этот ответ и смущает мое обращение к ним: https://www.nixtutor.com/freebsd/understanding-symbolic-links/
AG-это мой любимый способ, чтобы сделать это сейчас github.com/ggreer/the_silver_searcher . Это'ы в принципе то же самое, что опозданием, но с еще несколько оптимизаций.
Здесь'ы короткий тест. Я очистить кэш перед каждым тестом (ср. https://askubuntu.com/questions/155768/how-do-i-clean-or-disable-the-memory-cache )
Это должно работать:
Если вы ищете конкретное содержание в все файлы из структуры каталогов, вы можете использовать
найти
поскольку это более понятно, чем вы занимаетесь:Обратите внимание, что
-Л
(downcase л) показывает имя файла, содержащего текст. Удалить его, если вы хотите напечатать себе матч. Или использовать-ч
, чтобы получить файл вместе с матчем. Все вместе, другие варианты:Где-Н принтами` номер строки.
Это единственное, что работал для моего случая на моей текущей машине (ГИТ баш на Windows 7):
Я всегда забываю -print0 команды и -0 для путей с пробелами.
Редактировать: мой любимый инструмент теперь вместо ripgrep: https://github.com/BurntSushi/ripgrep/releases . Это's действительно быстро и имеет лучшие значения по умолчанию (например, рекурсивный по умолчанию). Же пример, как мой оригинальный ответ, но используя ripgrep:
РГ -г и"*.компания CS" и "по образцу содержание"
вВ 2018 году, который вы хотите использовать
ripgrep
или-серебро-искатель
, потому что они намного быстрее, чем альтернативные варианты.Вот каталог с 336 уровня подкаталогов:
На OSX, это устанавливает
ripgrep
:самогон установите ripgrep
. Это устанавливаетсеребро-искатель
:самогон установите the_silver_searcher
.команда grep -Р "и texthere"
в. (обратите внимание на точку в конце)(кредит^: https://stackoverflow.com/a/1987928/1438029)
Пояснение:
команда grep -Р "и texthere" и /
(рекурсивный греп все каталоги и подкаталоги)команда grep -Р "и texthere"
в. (рекурсивный греп эти каталоги и подкаталоги)рекурсивный греп
грэп помочь
$ грэп-помощь
Альтернативы
АСК
(http://beyondgrep.com/)АГ
(http://github.com/ggreer/the_silver_searcher)Ниже приведены команды для поиска в строку рекурсивно
в Unix " и " Linux-окружения
.для команды Unix-это:
для команды Linux-это:
В моем ИБМ сервера AIX (версия ОС: AIX 5.2 с), используйте:
это выведет путь/имя файла и относительный номер строки в файл, как:
./Инк/xxxx_x.ч
2865: /* описание : stringYouWannaFind /
в любом случае,это работает для меня : )
Список доступных флагов:
Возвращает все матчи регулярного выражения texthere в текущем каталоге, с соответствующим номером строки:
Возвращает все матчи за texthere, начиная с корневого каталога, с соответствующим номером строки и игнорирование регистра:
флаги, используемые здесь:
-Р
рекурсивный-Н
печатать номер строки с выхода-я
игнорировать регистрЯ думаю, это то, что вы'вновь пытается писать
и это может быть что-то еще полезна, если вы хотите найти файлы, грэп нажмите
Просто для удовольствия, быстрый и грязный поиск *.txt файлы, если @christangrant ответ слишком много набирать :-)
грэп -Р texthere .|грэп .тхт