답변:
grep -r --include=*.{cc,h} "hello" .
이 .
(현재) 디렉토리 에서 "hello"를 포함하는 모든 .cc 또는 .h 파일을 재귀 적으로 검색합니다 (모든 하위 디렉토리에서도).
파일 이름을 지정하거나 stdin을 사용하는 대신 와일드 카드를 전달할 수 있습니다.
grep hello *.h *.cc
-R
불행히도 추가 가 작동하지 않습니다. *
재귀 적으로 가기 전에 확장합니다 .
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
.
에 대한 매뉴얼 페이지 확인 find
및 xargs
자세한 내용을.
-print0
애프터 '*.cc'
그렇지 않으면 당신은 검색의 그 부분에 대한 작업을하지 않는 한. 또는 여기에 괄호를 삽입해야합니다 find . \( -name '*.cc' -or -name '*.h' \) -print0
.
find -exec +
xargs 대신에 구문 을 사용할 수도 있습니다
-exec grep "hello" {} +
중괄호 쌍은 파일 이름을 나타냅니다. 좋은 제안.
재귀 검색이 필요한 경우 다양한 옵션이 있습니다. 고려해야합니다ack
합니다.
당신이 GNU이있는 경우, 그 실패 find
와 xargs
:
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
합니다.
find ... -exec grep "hello" {} +
grep -l hello **/*.{h,cc}
shopt -s nullglob
.h 또는 .cc 파일이없는 경우 오류 메시지를 피할 수 있습니다 .
가장 간단한 방법 : grep -Ril "Your text"/
grep -si "hello" --include=*.{cc,h} ./* ./.*
(숨겨진 파일도 검색합니다). 모든 / 숨겨진 파일에서 문자열을 검색하는 일반 버전은 다음과 같습니다grep -s "hello" * .*
. 아마 가장 일반적으로 유용한 (그리고 간단한), "안녕하세요"에 대한이 검색 이외의 모든 숨김 파일 :grep -si "hello" ./*
이 게시물에 대한 감사 : askubuntu.com/a/777456