Как вы ищете конкретный текст в конкретных типах файлов? [Дубликат]

13

Возможный дубликат:
Как я могу найти в исходных файлах текст?

Какая команда для поиска определенного текста в определенных типах файлов, рекурсивно, в текущем каталоге?

Phillip
источник
Что вы хотите вернуть? на какой строке находится текст? название файла, в котором находится текст?
MaQleod
@MaQleod: Это было бы хорошо (имя файла + номер белья + фрагмент), если это возможно.
Филипп
@slhck: ack-grep не установлен; У меня нет разрешения на его установку.
Филипп
1
Вам не нужно ack-grep, вы можете использовать примеры в вопросе в качестве начала (как я уже сказал), то есть find | xargs | grepстроки. Для конкретного вывода man grepвсегда полезно прочитать.
Slhck
@slhck: Спасибо, я так и сделал grep -r --include=*.<type> "<string>" ., и это сработало. К сожалению, страница руководства не очень проста в упоминании конечной точки.
Филипп

Ответы:

11
find . -type f -name '*.extension' | xargs grep "string"

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

Fopedush
источник
2
Это разрывается с именами файлов, содержащими пробелы, вы должны использовать print0опцию, чтобы быть более безопасным.
Slhck
Только find -print0не поможет, также используйте xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo
0

Чтобы отобразить имя файла, номер строки в указанном файле и строка текста:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Он будет работать только в текущем каталоге, но он отформатирует его для вас.

MaQleod
источник