it-swarm-ko.tech

grep하지만 특정 파일 확장자 만

나는 grep 특정 디렉토리에 스크립트를 작성하고 있지만이 디렉토리에는 모든 종류의 파일 유형이 들어 있습니다.

나는 grep 그냥 .h.cpp 지금,하지만 어쩌면 몇 가지 다른 미래에 싶습니다.

지금까지 나는 가지고있다 :

{ grep -r -i CP_Image ~/path1/;

grep -r -i CP_Image ~/path2/;

grep -r -i CP_Image ~/path3/;

grep -r -i CP_Image ~/path4/;

grep -r -i CP_Image ~/path5/;} 

| mailx -s GREP [email protected]

이제는 특정 파일 확장명을 추가하는 방법을 보여줄 수 있습니까?

798
Jason

다음과 같이 --include 매개 변수를 사용하면됩니다.

grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

그게 네가 원하는 걸해야 해.

구문 참고 사항 :

  • -r - 재귀 적으로 검색
  • -i - 대소 문자 - 구분 안함 검색
  • --include=\*.${file_extension} - 확장자 또는 파일 패턴과 일치하는 파일 만 검색합니다.
1110
Nelson

이 중 일부는 너무 구문이 무겁거나 내 데비안 서버에서 문제가 발생했습니다. 이것은 나를 위해 완벽하게 작동했습니다.

PHP Revolution : Linux에서 파일을 Grep하는 방법은 있지만 특정 파일 확장자는 어떻게합니까?

즉:

grep -r --include=\*.txt 'searchterm' ./

... 또는 대소 문자를 구분하지 않는 버전 ...

grep -r -i --include=\*.txt 'searchterm' ./
  • grep : 명령

  • -r : 재귀 적으로

  • -i : 무시 케이스

  • --include : 모든 * .txt : 텍스트 파일 (파일 이름에 별표가있는 디렉토리가있는 경우 \를 사용하여 이스케이프 처리)

  • 'searchterm' : 검색 대상

  • ./ : 현재 디렉토리에서 시작합니다.

234
HoldOffHunger

어때?

find . -name '*.h' -o -name '*.cpp' -exec grep "CP_Image" {} \; -print
47
Amir Afghani
grep -rnw "some thing to grep" --include=*.{module,inc,php,js,css,html,htm} ./
43
Yuri Malov

HP 서버와 Sun 서버에는 -r 옵션이 없습니다.이 방법은 HP 서버에서 작동합니다.

find . -name "*.c" | xargs grep -i "my great text"

-i는 대소 문자를 구분하지 않고 문자열을 검색합니다.

15
Sam B

이것은 찾기 파일의 문제이므로, find을 사용합시다!

GNU를 사용하여 -regex 옵션을 사용하여 확장자가 .h 또는 .cpp 인 디렉토리 트리에서 해당 파일을 찾을 수 있습니다.

find -type f -regex ".*\.\(h\|cpp\)"
#            ^^^^^^^^^^^^^^^^^^^^^^^

그러면 각 결과에 대해 grep을 실행하는 것입니다.

find -type f -regex ".*\.\(h\|cpp\)" -exec grep "your pattern" {} +

이 배포본을 찾지 못하면 Amir Afghani의 , -o를 사용하여 옵션을 연결해야합니다 (이름은 .h 또는 .cpp로 끝나야합니다) :

find -type f \( -name '*.h' -o -name '*.cpp' \) -exec grep "your pattern" {} +
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

그리고 정말로 grep을 사용하려면 --include에 표시된 구문을 따르십시오.

grep "your pattern" -r --include=*.{cpp,h}
#                      ^^^^^^^^^^^^^^^^^^^
11
fedorqui

가장 쉬운 방법은

find . -type  f -name '*.extension' | xargs grep -i string 
7
user3640130

나는이 질문이 약간 날짜가다는 것을 알고있다, 그러나 나는 정상적으로 찾아내는 방법을 공유하고 싶다. .기음 과 .h 파일 :

tree -if | grep \\.[ch]\\b | xargs -n 1 grep -H "#include"

또는 회선 번호가 필요한 경우 :

tree -if | grep \\.[ch]\\b | xargs -n 1 grep -nH "#include"
3
Tom

아래 답변은 좋다.

grep -r -i --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]

하지만 다음과 같이 업데이트 할 수 있습니다.

grep -r -i --include \*.{h,cpp} CP_Image ~/path[12345] | mailx -s GREP [email protected]

어느 것이 더 간단 할 수 있습니다.

2
hao

ag (은색 검색 자)에는이 간단한 구문이 있습니다.

       -G --file-search-regex PATTERN
          Only search files whose names match PATTERN.

그래서

ag -G *.h -G *.cpp CP_Image <path>
2
Eldamir

각 "-o -name"에 대해 "-exec grep"을 써야합니다.

find . -name '*.h' -exec grep -Hn "CP_Image" {} \; -o -name '*.cpp' -exec grep -Hn "CP_Image" {} \;

또는 ()로 그룹화하십시오.

find . \( -name '*.h' -o -name '*.cpp' \) -exec grep -Hn "CP_Image" {} \;

옵션 '-Hn'은 파일 이름과 행을 표시합니다.

1
where23