grep
GUNARS
디렉토리의 패턴에 대해 파일 유형별로 재귀적으로 수행하는 방법 입니까 gadin-1.0
?
grep -rn --include=*.rc "GUNARS" ~/Opstk/bin/gadin-1.0/"
답변1
--include=*.rc
--include=
셸 기능을 사용하여 현재 디렉터리에서 다음으로 시작하고 끝나는 파일 이름 목록을 셸에 요청하는 방법입니다 ..rc
와일드카드,파일 이름 생성또는경로명 확장.
예를 들면 다음을 참조하세요.
zsh% echo --include=*.rc
zsh: no matches found: --include=*.rc
zsh% : > --include=foo.rc > --include=bar.rc
zsh% ls
'--include=bar.rc' '--include=foo.rc'
zsh% echo --include=*.rc
--include=bar.rc --include=foo.rc
--include=*.rc
여기에서 텍스트를 에 전달하려고 합니다 grep
.
grep -rn '--include=*.rc' GUNARS ~/Opstk/bin/gadin-1.0/
또는:
grep -rn --include='*'.rc GUNARS ~/Opstk/bin/gadin-1.0/
그냥 *
인용해 보세요. GUNARS
이 6개 문자 중 어느 것도 쉘 구문에서 특별하지 않기 때문에 따옴표가 필요하지 않습니다 .
이 코드의 셸 구문에 포함된 특수 문자는 다음과 같습니다.
- 매개변수를 구분하기 위해 여기에서 사용된 공간
~
HOME
csh와 유사한 Korn/POSIX와 유사한 쉘, 그리고 적어도 일부 최신 쉘에서는 환경 변수(홈 디렉토리)의 값으로 확장됩니다.- 명령을 구분하는 개행 문자입니다.
그들은 바로 그거야기필코 아니다인용하십시오. 원하는 경우 다른 모든 내용을 인용 할 수 있지만 다음을 bash
포함한 여러 셸에서 인용할 수 있습니다.~
인용되지 않음 /
또는 :
확장하려면¶:
'grep' '-rn' '--include=*.rc' 'GUNARS' ~/'Opstk/bin/gadin-1.0/'
비교하다:
bash-5.2$ echo ~'/'
~/
bash-5.2$ echo ~/
/home/me/
위에서 언급한 Bourne과 유사한 쉘(예: zsh 또는 bash)에서는 작은 따옴표 대신 큰 따옴표를 사용할 수 있지만 여전히 큰 따옴표( $
, `
, \
²) 안에 특별한 의미를 유지하는 일부 문자가 있다는 점에 유의하십시오.
의 경우 grep
및 -r
는 --include
비표준 옵션입니다. 모든 grep
구현이 이를 지원하는 것은 아니며 이를 다르게 해석하는 구현도 있습니다( 의 경우 많음 -r
, 의 경우 거의 없음 --include
).
일반 파일의 파일 이름과 줄 번호를 보고하는 GUNARS
보다 이식성이 높은 표준 방법 은 다음과 같습니다..rc
$HOME/Opstk/bin/gadin-1.0/
find ~/Opstk/bin/gadin-1.0/ -name '*.rc' -type f \
-exec grep -n GUNARS /dev/null {} +
최소한 두 개의 파일을 전달 /dev/null
해야 합니다 . grep
파일을 전달하는 경우에만 해당 경로가 인쇄되지 않습니다. 일부 구현에는 파일 경로를 강제로 인쇄하는 옵션이 grep
있습니다 .-H
셸을 사용하면 zsh
다음 작업도 수행할 수 있습니다.
grep -n GUNARS /dev/null ~/Opstk/bin/gadin-1.0/**/*.rc(.)
일반 파일 검색은 재귀 와일드카드 및 와일드카드 한정자를 사용하여 수행됩니다.
여기에는 몇 가지 장점이 있습니다.
- 파일 목록 정렬
- 숨겨진 항목을 제외합니다(glob 한정자를 사용하여 다시 추가할 수 있음
D
). - 파일 이름이 유효한 텍스트로 구성되지 않은 경우에도 적용됩니다.
그러나 몇 가지 단점도 있습니다.
- 일치하는 파일이 많은 경우 시스템 명령 길이 제한에 도달할 수 있습니다(이 문제는 를 사용하여 해결할 수 있음
zargs
). - 일치하는 파일이 없으면 오류가 보고됩니다.
csh의 경우 1, 여기서물결표 확장from, ~'/'
이름이 지정된 사용자의 홈 디렉터리로 확장됩니다 /
(또는 보고알 수없는 사용자: /.실수).
² 또한 인코딩이 일부 로케일의 여러 문자와 `
동일하거나 동일한 인코딩으로 끝나는 문자를 찾으세요.\