Как указать grep, что я хочу выбрать префикс пути при рекурсивном поиске?

Как указать grep, что я хочу выбрать префикс пути при рекурсивном поиске?

Пример. У меня есть слово, которое я ищу, скажем"кот". И я знаю, что слово может быть расположено где угодно в текущем рабочем каталоге. Поэтому я используюгрэп -р, и это дает результаты в следующем виде:

./example_root/[dir1|dir2]/[SOME_PROBITRARY_SUBPATH]/cat_file,

где

cat_file

это файл, который содержит слово"кот". Что делать, если меня интересует только

/example_root/dir1/[любой_путь]

префикс для моего пути? Как мне сказать емугрэп?

решение1

я бы попробовал

grep -rl cat directory | xargs dirname

где

  • grep -rl cat directory рекурсивный поиск ( -r) cat в каталоге и ( -l) lisy-файлах.
  • | xargs dirnameкаждый файл «отдается» dirname, который удаляет часть файла.

решение2

Ответ @Kusalananda в комментариях - это то, что я хотел: просто сделай

grep -r 'cat' /example_root/dir1/

Однако, если вы хотите получить имена каталогов, в которых находятся слова, следующее (спасибо @Archemar) будет полезным.

grep -rl cat directory | xargs dirname

Связанный контент