Как я нахожу фразу/слово рекурсивно в дереве файла в Linux?

как я нахожу фразу/слово рекурсивно в дереве файла в Linux?
Я попробовал find . -name ./* | grep my_phrase и я попробовал grep -r "register_long_arrays" *

5
задан 27.11.2019, 00:06

5 ответов

grep -r "register_long_arrays" *

рекурсивно найдет все случаи register_long_arrays в Вашем текущем каталоге.

Если Вы хотите объединиться find с grep ограничить типы файлов искало, необходимо использовать его как это (этот пример ограничит поиск окончанием файлов .txt):

find . -name '*.txt' -exec grep "register_long_arrays" {} \;

{} заменяется каждым файлом это find находит без Вас имеющий необходимость волноваться о выходе из проблемных символов как пробелы. Отметьте обратную косую черту перед точкой с запятой. Это гарантирует, что точки с запятой оставляют и передают исполнительному пункту (grep) вместо того, чтобы завершить команду находки.

Если Вы все еще не находите то, что Вы хотите это, может быть проблема случая, (предоставьте -i отметьте к grep для игнорирования регистра), или возможно содержание, которое Вы хотите, находится в скрытом файле (запускающийся с .), который * не будет соответствовать, в этом случае предоставлять обоих * и .* как аргументы grep.

11
ответ дан 07.12.2019, 16:54
find . -type f -exec grep my_phrase {} \;

будет работать для поиска всех регулярных файлов, но это вызывает grep однажды для каждого файла. Это неэффективно и сделает поисковое взятие заметно дольше на медленных компьютерах и/или больших иерархиях каталогов. По этой причине лучше использовать xargs:

find . -type f | xargs grep my_phrase

или, если у Вас есть файлы, имена которых содержат пробелы,

find . -type f -print0 | xargs -0 grep my_phrase

Еще более простой должен просто использовать -r опция к grep:

grep -r my_phrase .

Отметьте использование. вместо * как аргумент имени файла. Это избегает проблемы расширения * не включая скрытые файлы.

3
ответ дан 07.12.2019, 16:54

попытка:

find . -name ./\* | xargs grep my_phrase

xargs назовет grep с на каждом из файлов это find находит.

0
ответ дан 07.12.2019, 16:54

Можно также попробовать ack. Это быстро. Если Вы работаете с деревьями кода, это - большой инструмент.

Поиск foobar в содержании файла рекурсивно из текущего каталога:

ack foobar

Поиск регистрирует, который называет соответствие regexp:

ack -g "foo(bar)?"
0
ответ дан 07.12.2019, 16:54
find . -exec grep my_phrase {} \;

find генерирует список всех файлов в или ниже текущего каталога. exec выполнит команду grep my_phrase для каждого найденного файла. \; является просто волшебным, чтобы заставить его работать. Детали того, как это работает, могут обычно замечаться с man find.

Вы могли бы также хотеть посмотреть на -H опция grep если Вы хотите знать не только, если это было найдено, но и где.

0
ответ дан 07.12.2019, 16:54

Теги

Похожие вопросы