Grep через результаты команды «найти» - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь сделать простой поиск по файлам.

  1. Найти все файлы, которые соответствуют шаблону имени
  2. Просмотрите результаты шага 1 и найдите только те файлы, содержимое которых имеет указанную c строку

Я пытался,

find . -name rio.yml -exec  grep "my pattern" \;

Что лучше всего подходит для чего-то подобного.

Ответы [ 2 ]

3 голосов
/ 15 января 2020

Если вам просто нужны пути, содержащие совпадение, выполните:

find . -name rio.yml -type f -exec grep -q "my pattern" {} \; -print

(Учитывая, что вы уже фильтруете по имени, -type f может быть избыточным, но я считаю его полезным при работе с grep.) Вы можете использовать grep -l, но часто удобно построить конвейер для xargs с -print0, так что это хороший шаблон.

2 голосов
/ 15 января 2020

Чтобы получить имя файла, содержащего некоторую строку, вам нужно использовать grep -l

find . -name rio.yml -exec  grep -l "my pattern" {} \;

, чтобы получить полный путь к файлам; Вы можете использовать $(pwd) вместо каталога поиска.

...