저는 OSX에서 사용되는 단어를 Ruby on Rails 애플리케이션에서 검색하고 grep
있으며 특정 패턴과 일치하는 디렉토리를 제외하고 싶습니다.
다음 명령을 사용하고 있습니다.
grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'
명령이 내가 상상했던 대로 실행되지 않습니다. 나는 이렇다아이디어작동합니다:
- 나- 대소문자를 구분하지 않는 검색
- N- 패턴이 발견된 줄 번호를 인쇄하세요.
- 오른쪽- 재귀 검색
- 승- 전체 단어를 원합니다. 즉, "direct"는 일치하지만 "directory"는 일치하지 않습니다.
- -이자형- 확장 정규식을 사용하세요.
- '직접'- 내가 매칭하고 싶은 정규식
- .- 현재 디렉토리에서 검색
- --exclude-dir -E 'git|log|자산'- git, log 또는 자산과 일치하는 디렉터리를 제외합니다.
디렉토리 제외에 관한 한 명령은 여전히 다음으로 끝납니다.'./git'그리고'. /통나무'디렉토리 뿐만 아니라'./응용 프로그램/자산'
나는 분명히 기본적인 지식이 하나 부족하지만 그것이 무엇인지 모릅니다.
답변1
그 패턴은 다음과 같다구체이런 패턴은 아니지정규식. ~에 따르면info
페이지:
--제외-디렉터리=GLOB
이름 접미사가 GLOB 패턴과 일치하는 명령줄 디렉터리는 건너뜁니다. 재귀적으로 검색할 때 기본 이름이 GLOB와 일치하는 하위 디렉터리는 건너뜁니다. GLOB의 추가 후행 슬래시는 무시됩니다.
그래서,스위치를 여러 번 사용하거나또는 쉘이 중괄호 확장을 지원하는 경우 이를 단축하고 쉘이 패턴 목록을 확장하도록 할 수 있습니다. 예를 들면 다음과 같습니다.
grep -inRw -E 'direct' . --exclude-dir={git,log,assets}
이름이 git
, log
및 assets
또는인 디렉토리를 제외합니다. 예를 들면 다음과 같습니다.
grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}
git
로 끝나거나 시작하는 디렉터리 이름을 제외합니다 asset
.
쉘은 목록이 존재하는 경우에만 목록을 확장합니다.중괄호 안에 디렉터리 이름/전역 변수가 두 개 이상 있어야 합니다..
답변2
--exclude-dir
이해하지 못하다 |
.
--exclude-dir
그러나 제외할 각 디렉터리에 대해 한 번씩 여러 번 지정하면 동일한 효과를 얻을 수 있습니다 .
grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'
답변3
이것이 내가 잘못한 것입니다. --exclude-dir
경로 이름 대신 디렉터리 이름을 입력했습니다. 디렉토리 이름에는 /
.
다음은 작동합니다:
grep -r --exclude-dir={cache,lib} pattern /home/ /var/
다음은 작동하지 않습니다:
grep -r --exclude-dir={/var/cache,/var/lib} pattern /home/ /var/
답변4
다음을 사용하세요:
grep -inRw -E 'direct' folder/ --exclude-dir={\*git\*,\*log\*,\*assets\*}
또는 현재 폴더
grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'