노트: 이전에 게시한 내용을 바탕으로 이 질문을 업데이트했기 때문에 답변 중 일부가 제가 묻고 싶은 내용과 일치하지 않을 수 있습니다.
하위 디렉터리에 있는 파일 집합 내의 일부 텍스트를 검색하고 파일 이름에 "svn"이 포함된 특정 파일에 대한 결과를 건너뛰고 싶습니다.
어떻게 해야 하나요?
답변1
세부 사항은 정확히 무엇을 하려는지에 따라 다르지만부정적인 시선도움이 될 수도 있습니다. 일부 정규 표현 언어(PCRE 포함)가 이를 지원합니다. grep
스위치를 사용하여 PCRE를 활성화 할 수 -P
있으므로 찾고 있는 특정 패턴에 따라 이를 사용하여 몇 가지 깔끔한 작업을 수행할 수 있지만 노력할 가치는 없습니다.
그러나 업데이트를 읽은 후에는 이를 수행하는 더 좋은 방법이 있습니다. grep
사용 가능한 옵션 -exclude
:
--exclude=GLOB
Skip files whose base name matches GLOB (using wildcard
matching). A file-name glob can use *, ?, and [...] as
wildcards, and \ to quote a wildcard or backslash character
literally.
그래서, 당신은 간단히 할 수 있습니다
grep -Inr TEXT --exclude='*.svn' dir/
답변2
grep
정방향 검색( )과 부정 검색( grep -v
)을 동시에 수행할 수는 없습니다 . 또 다른 방법은 -E
(또는 egrep
동일한 것임)을 사용하고 한 문자열과 일치하지만 다른 문자열은 일치하지 않는 일치 정규식을 제공하는 것입니다.
답변3
grep이 제공하는 파일에 대해 보다 정교한 제어가 필요하다고 판단되면 grep을 사용하여 파일 목록을 생성 --exclude
할 수 있습니다 .find
$ grep 'whatever_you_want_to_find' $(find wherever_you_want_to_search -not -iregex 'whatever_you_want_to_ignore')