[linux] grep을 사용하여 문자열“hello”가 있지만 .h 및 .cc 파일 만 표시하는 모든 파일의 현재 디렉토리를 검색하려면 어떻게합니까?

grep을 사용하여 현재 디렉토리에서 “hello”라는 문자열이 포함 된 모든 파일을 검색하고 .h 및 .cc 파일 만 표시하려면 어떻게해야합니까?



답변

grep -r --include=*.{cc,h} "hello" .

.(현재) 디렉토리 에서 “hello”를 포함하는 모든 .cc 또는 .h 파일을 재귀 적으로 검색합니다 (모든 하위 디렉토리에서도).

다른 stackoverflow 질문에서


답변

파일 이름을 지정하거나 stdin을 사용하는 대신 와일드 카드를 전달할 수 있습니다.

grep hello *.h *.cc


답변

find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello".

에 대한 매뉴얼 페이지 확인 findxargs자세한 내용을.


답변

현재 디렉토리에서 재귀 적으로 검색하려면 다음을 수행하십시오.

grep -r 'myString' .


답변

재귀 검색이 필요한 경우 다양한 옵션이 있습니다. 고려해야합니다ack 합니다.

당신이 GNU이있는 경우, 그 실패 findxargs:

find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null

를 사용 /dev/null하면 파일 이름을 인쇄 할 수 있습니다. -print0-0 공백이 포함 된 파일 이름 (뉴 라인 등)와 거래.

공백이있는 이름이 모호하지 않은 경우 다음을 사용할 수 있습니다.

find . -name '*.*[ch]' -print | xargs grep hello /dev/null

패턴 일치가 더 지저분하지만 (더 간단하지만) 작동하지 않기 때문에 의도하지 않은 몇 가지 이름을 선택할 수 있습니다. 그리고 비 GNU 버전과 find및에서 작동 xargs합니다.


답변

질문을주의 깊게 읽으면 “현재 디렉토리에서 모든 파일 을 검색하도록 grep하십시오” “hello”문자열을 포함하는 을 .h 및 .cc 파일 만 표시 하십시오. 정확한 요구 사항을 충족시키기 위해 여기 내 제출물이 있습니다.

파일 이름이 표시됩니다.

grep -lR hello * | egrep '(cc|h)$'

… 이것은 파일 이름과 내용을 표시합니다 :

grep hello `grep -lR hello * | egrep '(cc|h)$'`


답변

grep -l hello **/*.{h,cc}

shopt -s nullglob.h 또는 .cc 파일이없는 경우 오류 메시지를 피할 수 있습니다 .