Допустим, мне нужно найти функцию GetTypes()
во всех исходных файлах C # ( .cs
) в каталогах / подкаталогах.
Я использовал grep -rn GetTypes *.cs
, но я получил ошибку с grep: *.cs: No such file or directory
. Я должен был использовать grep -rn GetTypes *
, но в этом случае он показывает все файлы не *.cs
только.
Какую команду мне нужно использовать, чтобы найти строку только в .cs
файлах?
Ответы:
Если ваша оболочка bash ≥4, вставьте
shopt -s globstar
вашу~/.bashrc
. Если ваша оболочка Zsh, вы в порядке. Тогда вы можете запустить**/*.cs
означает, что все файлы, совпадающие*.cs
в текущем каталоге или в его подкаталогах, рекурсивно.Если вы не используете оболочку, которая поддерживает,
**
но ваш grep поддерживает--include
, вы можете сделать рекурсивный grep и сказать,grep
чтобы рассматривать только файлы, соответствующие определенным шаблонам. Обратите внимание на кавычки вокруг шаблона имени файла: он интерпретируется grep, а не оболочкой.Только с переносными инструментами (некоторые системы вообще не имеют
grep -r
), используйтеfind
для части обхода каталога иgrep
для части текстового поиска.источник
globstar
вариант для текущей Баш 4+ оболочки, использование:shopt -s globstar
.Вы должны проверить маленький добрый grep / найти замену, известную как
ack
. Это специально для поиска по каталогам файлов исходного кода.Ваша команда будет выглядеть так:
источник
Если вы используете GNU
grep
, вы можете указать, какие файлы включать в рекурсивный обход каталога:(где последний период обозначает текущий рабочий каталог как корень обхода)
источник
Я использую комбинацию find и grep:
Для
find
, вы можете заменить.
каталогом и удалить,-name
если вы хотите посмотреть в каждом файле.Для
grep
,-bn
напечатает позицию и номер строки и--color
поможет вашим глазам, выделив то, что вы ищете.источник