11

Есть ли команда, которая позволяет искать ключевое слово в файлах в каталоге с определенным расширением?

Строка grep -irn "string" ./path обеспечивает рекурсивный поиск всех файлов в каталоге ./path . Мое конкретное требование - искать во всех файлах в ./path с расширением, например *.h

6 ответов6

10

S и др (включить) ВГ ELL неавтоматического иона globstar с помощью команды

    shopt -s globstar

Это приведет к тому, что ** в качестве компонента имени файла будет означать все здесь и ниже.  Таким образом, path/** означает все в каталоге path и его подкаталогах.  (Вам не нужно печатать ./ здесь.)  Тогда вы можете использовать

grep -in "string" path/**/*.h

искать все .h файлы в и под path .


Вы можете у nПравильно установите опции с shopt -u

10

После некоторых испытаний я думаю, что grep -irn 'string' --include '*.h' более удобен

5
find /path -iname "*.h" -exec grep -inH "string" "{}" \;
3

Если вы можете установить что-то на свою машину, я предлагаю использовать ack.

Вы можете делать именно то, что вам нужно, и многое другое. Для вашего случая использования вы можете сделать:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hh фильтрует файлы h
  • игнорирует дело

Чтобы определить, какие фильтры файлов поддерживаются изначально, выполните команду ack --help=type .

3

Что насчет этого?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

Объяснение:

  • -L: следовать символическим ссылкам
  • -name: используя звездочку, вы можете описать расширения
  • -in: то же, что и ваше предложение, но 'r' заменяется командой find
  • {}: это означает результат команды find
  • \; : если вы объединяете find с -exec , это спецификатор конца команды
0

Если вы используете gnu grep, то у него есть флаг, который делает именно то, что вы хотите:

grep -irn --include=\*.h "string" path

хотя я не думаю, что это доступно в других greps.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .