나는 이 프로젝트가 어떤 버전의 최대 절전 모드에 의존하는지 알아내려고 노력하고 있습니다(내 질문과 직교합니다).
우리는 여러 개의 하위 프로젝트를 포함하는 상위 프로젝트를 가지고 있으며 이것이 하나 이상의 프로젝트에 있다는 것을 알고 있습니다 pom.xml
. 문제는 일치 항목을 인쇄할 때 해당 줄만 표시되고 pom.xml
I want to Know which Child Project 에서 발견되었다는 것입니다 pom.xml
.
상대 경로를 인쇄하려면 어떻게 해야 합니까 grep
? (절대 경로도 작동하지만 보기가 좋지 않습니다.) 이것이 가능하지 않다면 다른 제안을 환영합니다.
$ grep -rI -3 org.hibernate pom.xml
답변1
find, xargs 및 grep을 함께 사용하는 것이 좋습니다.
cd top-dir
find . -print -name 'pom.xml' -print0 | xargs -0 grep -l pattern
발견된 디렉토리의 특수 문자가 보호되고 올바르게 처리되도록 -print0/-0 옵션을 넣었습니다.
위의 내용은 패턴과 일치하는 최상위 디렉터리를 기준으로 파일 이름을 나열합니다.
답변2
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.
답변3
globstar
또 다른 해결책은 패턴을 사용하는 것입니다.재귀 전역, grep
-H
출력에 파일 이름을 포함하는 옵션과 함께 사용됩니다.
shopt -s globstar
grep -H org.hibernate **/pom.xml
재귀 grep
( -R
)와 달리 이 -H
옵션은 이 방법을 사용할 때 출력에 파일 경로를 포함합니다.
팁: 재귀를 영구적으로 허용하려면 와일드카드를 추가하는 것이 유용할 수 shopt -s globstar
있습니다 .bashrc
.
답변4
다음 명령을 사용하십시오.
cat */demo.txt | grep -Rli 'demo'
이 명령은 파일의 경로를 반환합니다.