하위 디렉터리 내의 특정 파일에서만 문자열 찾기

하위 디렉터리 내의 특정 파일에서만 문자열 찾기

GetTypes()모든 C# 소스 파일( ) 디렉터리/하위 디렉터리 .cs에서 함수를 찾아야 한다고 가정해 보겠습니다 .

사용했는데 grep -rn GetTypes *.cs오류가 났습니다 grep: *.cs: No such file or directory. 사용해야 grep -rn GetTypes *하는데 이 경우 모든 파일만 표시되는 것은 아닙니다 *.cs.

.cs파일에서 문자열만 찾으려면 어떤 명령을 사용해야 합니까?

답변1

쉘이 bash ≥4인 경우 shopt -s globstar셸을 변경하십시오 ~/.bashrc. 쉘이 zsh이면 문제가 없습니다. 그럼 당신은 실행할 수 있습니다

grep -n GetTypes **/*.cs

**/*.cs*.cs현재 디렉터리 또는 해당 하위 디렉터리에서 반복적으로 일치하는 모든 파일을 나타냅니다.

**grep 을 지원하는 쉘을 실행하지 않는 경우 --include재귀 grep을 수행하여 grep특정 패턴과 일치하는 파일만 고려하도록 지시할 수 있습니다. 파일 이름 패턴 주위에 따옴표가 있습니다. 이는 쉘이 아닌 grep에 의해 해석됩니다.

grep -rn --include='*.cs' GetTypes .

grep -rfind디렉터리 탐색 부분과 grep텍스트 검색 부분 에는 휴대용 도구(일부 시스템에는 전혀 없는 도구)만 사용하십시오 .

find . -name '*.cs' -exec grep -n GetTypes {} +

답변2

당신은 훌륭한 작은 grep/find 교체를 확인해야 합니다.ack. 특히 소스 코드 파일에 대한 디렉터리를 검색하는 데 사용됩니다.

귀하의 명령은 다음과 같습니다:

ack --csharp GetTypes

답변3

GNU 를 사용하는 경우 grep재귀 디렉터리 탐색에 포함할 파일을 지정할 수 있습니다.

grep --include '*.cs' -rn GetTypes .

(마지막 마침표는 순회를 위한 루트 디렉터리로 현재 작업 디렉터리를 나타냅니다.)

답변4

나는 find와 grep의 조합을 사용합니다.

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

예를 들어 모든 파일을 보려면 해당 디렉터리로 바꾸고 삭제할 find수 있습니다 ..-name

의 경우 grep위치 -bn와 줄 번호가 인쇄되어 --color찾고 있는 내용을 강조 표시하여 눈에 도움이 됩니다.

관련 정보