[unix] grep –exclude /-include 구문을 사용하여 특정 파일을 grep하지 마십시오.

foo=디렉토리 트리에서 텍스트 파일 의 문자열 을 찾고 있습니다. 일반적인 Linux 컴퓨터에 bash 쉘이 있습니다.

grep -ircl "foo=" *

디렉토리에는 또한 “foo =”와 일치하는 많은 바이너리 파일이 있습니다. 이 결과는 관련이 없으며 검색 속도가 느리기 때문에 grep이 이러한 파일 (대부분 JPEG 및 PNG 이미지) 검색을 건너 뛰고 싶습니다. 어떻게해야합니까?

나는이 알고 --exclude=PATTERN--include=PATTERN옵션,하지만 패턴 형식은 무엇입니까? grep의 맨 페이지는 다음과 같이 말합니다.

--include=PATTERN     Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN     Recurse in directories skip file matching PATTERN.

에 검색 그렙 포함 , 포함, 제외 그렙 , 제외 GREP 및 변종 관련 내용을 찾지 못 하셨나요

특정 파일에만 더 좋은 방법이 있다면 나는 전부입니다. 문제가되는 파일을 이동하는 것은 옵션이 아닙니다. 특정 디렉토리 만 검색 할 수 없습니다 (디렉토리 구조는 모든 곳에서 모든 것이 엉망입니다). 또한 아무것도 설치할 수 없으므로 일반적인 도구 ( grep 또는 제안 된 find 와 같은 )와 관련이 있습니다.



답변

쉘 글 로빙 구문을 사용하십시오.

grep pattern -r --include=\*.{cpp,h} rootdir

의 구문 --exclude은 동일합니다.

별표는 백 슬래시로 이스케이프되어 셸에서 별표가 확장되는 것을 방지합니다 (예 --include="*.{cpp,h}": 등도 인용 ). 당신이 패턴과 일치하는 현재 작업 디렉토리에있는 파일이 있다면처럼 그렇지 않으면, 명령 줄 뭔가를 확장 할 grep pattern -r --include=foo.cpp --include=bar.h rootdir경우에만라는 이름의 파일을 검색 할 것이다, foo.cpp그리고 bar.h당신이 원하는 것을 매우 가능성이 없습니다이다.


답변

이진 파일을 건너 뛰려면 -I(대문자 i) 옵션을 참조하십시오. 이진 파일은 무시합니다. 나는 정기적으로 다음 명령을 사용합니다.

grep -rI --exclude-dir="\.svn" "pattern" *

재귀 적으로 검색하고 이진 파일을 무시하며 원하는 패턴에 대해 Subversion 숨겨진 폴더를 찾지 않습니다. 나는 직장에서 내 상자에 “grepsvn”이라는 별칭을 사용했습니다.


답변

이러한 상황에 맞게 설계된 ack을 살펴보십시오 . 당신의 예

grep -ircl --exclude=*.{png,jpg} "foo=" *

ack로 수행됩니다.

ack -icl "foo="

ack은 기본적으로 이진 파일을 찾지 않으며 -r은 기본적으로 켜져 있습니다. CPP와 H 파일 만 원한다면

ack -icl --cpp "foo="


답변

grep 2.5.3은 –exclude-dir 매개 변수를 도입하여 원하는 방식으로 작동합니다.

grep -rI --exclude-dir=\.svn PATTERN .

환경 변수를 설정할 수도 있습니다. GREP_OPTIONS = “-exclude-dir = .svn”

그래도 앤디가 ack에 대한 투표를 하겠습니다. 최고입니다.


답변

오랜 시간이 지난 후에 이것을 발견하면 다음과 같이 여러 포함 및 제외를 추가 할 수 있습니다.

grep "z-index" . --include=*.js --exclude=*js/lib/* --exclude=*.min.js


답변

제안 된 명령 :

grep -Ir --exclude="*\.svn*" "pattern" *

–exclude는 기본 이름에서 작동하기 때문에 개념적으로 잘못되었습니다. 다시 말해, 현재 디렉토리에서 .svn 만 건너 뜁니다.


답변

grep 2.5.1에서는 ~ / .bashrc 또는 ~ / .bash 프로필에이 줄을 추가해야합니다.

export GREP_OPTIONS="--exclude=\*.svn\*"