grep print относительный путь к файлу при выполнении рекурсивного поиска

Я пытаюсь выяснить, от какой версии спящего режима зависит проект (это ортогонально моему вопросу).

У нас есть родительский проект с несколькими подпроектами, и я знаю, что это определено в одном или нескольких pom.xml . Проблема в том, что когда он печатает совпадение, все, что он говорит мне, это строка и что она найдена в pom.xml , я хочу знать, какой pom.xml .

Как я могу получить grep для печати относительного пути (абсолютный будет работать слишком, но менее красиво)? Если не удастся найти альтернативные предложения.

 $ grep -rI -3 org.hibernate pom.xml 

Я бы предложил использовать комбинацию find, xargs и grep:

  cd top-dir find . -print -name 'pom.xml' -print0 | xargs -0 grep -l pattern 

Я вставляю параметр -print0 / -0, чтобы специальные символы в найденных каталогах были защищены и надлежащим образом обработаны.

Вышеуказанное будет отображать имя файла (ов) относительно верхнего уровня, соответствующего паттерну.

 grep --with-filename -rI -3 org.hibernate pom.xml 

На странице руководства:

  -H, --with-filename Print the file name for each match. This is the default when there is more than one file to search.