재귀 검색을 수행할 때 grep은 상대 파일 경로를 인쇄합니다.

재귀 검색을 수행할 때 grep은 상대 파일 경로를 인쇄합니다.

나는 이 프로젝트가 어떤 버전의 최대 절전 모드에 의존하는지 알아내려고 노력하고 있습니다(내 질문과 직교합니다).

우리는 여러 개의 하위 프로젝트를 포함하는 상위 프로젝트를 가지고 있으며 이것이 하나 이상의 프로젝트에 있다는 것을 알고 있습니다 pom.xml. 문제는 일치 항목을 인쇄할 때 해당 줄만 표시되고 pom.xmlI 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'

이 명령은 파일의 경로를 반환합니다.

관련 정보