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


138

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

답변:


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

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

다른 stackoverflow 질문에서


5
원래 게시물에서 "현재 디렉토리"라고 말했지만 재귀 적으로 또는 하위 디렉토리에 필요하지 않습니다 (나중에 포스트에서 언급했음을 알았습니다). 현재 디렉토리에서만 수행하는 방법에 관심이있는 사람들은 grep -si "hello" --include=*.{cc,h} ./* ./.*(숨겨진 파일도 검색합니다). 모든 / 숨겨진 파일에서 문자열을 검색하는 일반 버전은 다음과 같습니다 grep -s "hello" * .*. 아마 가장 일반적으로 유용한 (그리고 간단한), "안녕하세요"에 대한이 검색 이외의 모든 숨김 파일 : grep -si "hello" ./* 이 게시물에 대한 감사 : askubuntu.com/a/777456
jbobbins

1
grep -r --include=*.{java,py} "hello" .

어떤 이유로 GNU grep 유틸리티를 사용하더라도 macOS에서는 작동하지 않습니다.
xApple

49

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

grep hello *.h *.cc

나는 또한 모든 하위 디렉토리가 필요하다
stackoverflow

-R불행히도 추가 가 작동하지 않습니다. *재귀 적으로 가기 전에 확장합니다 .
Donald Miner

Noufal의 답변은 하위 디렉토리가 필요한 경우 찾고있는 것입니다
Donald Miner

8
@Jammin 질문 할 때 그 점을 분명히해야합니다. 이 답변은 명시된 질문에 대한 "올바른"답변입니다.
jordanm 2012

$ grep -R hello *# 모든 단어에서 hello (하위 디렉토리 포함)를

19

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

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


1
당신은 있어야 -print0애프터 '*.cc'그렇지 않으면 당신은 검색의 그 부분에 대한 작업을하지 않는 한. 또는 여기에 괄호를 삽입해야합니다 find . \( -name '*.cc' -or -name '*.h' \) -print0.
Jonathan Leffler 2014

주목 해 주셔서 감사합니다. "수정"하기 위해 답을 편집했습니다.
Noufal Ibrahim

3
find -exec +xargs 대신에 구문 을 사용할 수도 있습니다
jordanm

@jordanm : 예 : -exec grep "hello" {} +중괄호 쌍은 파일 이름을 나타냅니다. 좋은 제안.
Jonathan Leffler 2014

10

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

grep -r 'myString' .

5

재귀 검색이 필요한 경우 다양한 옵션이 있습니다. 고려해야합니다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합니다.


당신은 또한 말할 수있다find ... -exec grep "hello" {} +
fedorqui 'SO 중지 피해'

5

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

파일 이름이 표시됩니다.

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

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

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

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

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


4
Google 등을 사용하는 방법을 알고 있습니다. 여기에 몇 가지 답변에 "-l"이 있으므로 모든 정보를 한 곳에 모아두면 좋았습니다.
앤드류 스위프트

-l (소문자 "el") 정상 출력을 억제합니다. 출력이 정상적으로 인쇄 될 각 입력 파일의 이름을 인쇄합니다. 첫 번째 경기에서 스캔 / 검색이 중지됩니다.
렉스 CoolCode 찰스

-1

가장 간단한 방법 : grep -Ril "Your text"/


1
이것은 .h 또는 .cc 파일 만 표시하지 않으며 사용한 옵션과 이유를 설명하는 것이 좋습니다.
kon psych
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.