grep -r은 기본적으로 어디에서 검색합니까?


16

경로를 지정하지 않고 grep을 사용하여 검색 grep -r 'mytext'하면 시간이 오래 걸리는 것처럼 나타났습니다 . 한편 경로를 지정 grep -r 'mytext' .하여 검색하면 필요한 것을 즉시 찾습니다. 그래서, grep이 어떤 디렉토리에서 어떤 디렉토리를 검색하는지 궁금합니다.

UDATE : grep 버전 : grep (GNU grep) 2.10


3
foomytextbar실행 후 타자를 입력하고 쓰십시오 (다음에 Enter) grep -r 'mytext'.
sr_

2
아마도 당신은 그 왕이 무엇인지 명시해야 grep합니다. 는 GNU와 grep리눅스에서 I 사용 grep -r 'mytext'grep -r 'mytext' .같은 일을 : 현재 디렉토리부터 재귀 적으로 검색 할 수 있습니다. -r스위치가 사용될 때 GNU는 STDIN을 검색 grep 하지 않습니다 .
manatwork

2
grep2.12로 테스트했습니다 : pastebin.com/L4my26QS 한편 버전 2.11 (2012-03-02)에 관한 뉴스 파일에서 이것을 발견했습니다. "파일 피연산자가 제공되지 않고 명령 줄 -r 또는 이와 동등한 옵션이 제공되는 경우 grep은 작업 디렉토리를 검색합니다. 이전에 grep은 -r을 무시하고 표준 입력을 비 반복적으로 검색했습니다. GREP_OPTIONS에있는 -r은이 새로운 효과를 갖지 않습니다. "
manatwork

3
GNU grep은 최근에 -r 인수를 사용하여 동작을 변경했습니다 ( commit 참조 ). 최신 grep이있는 "grep -r PATTERN"은 STDIN이 아닌 현재 디렉토리를 검색합니다.
hluk

2
@Mikel, grep 버전으로 내 질문을 업데이트했습니다. 내가 '오래된'그렙을 사용하고 있기 때문에 내가 옳다고 지적한 대답은 실제로 올바른 것 같습니다. 따라서 -r을 지정했는지 여부는 중요하지 않습니다. 디렉토리가 제공되지 않으면 STDIN에서 검색합니다. Btw, 조사해 주셔서 감사합니다. 이제 grep의 향후 변경 사항에 대해 알게 될 것입니다.)

답변:


24

실제로 어디에서나 검색하지 않습니다. 표준 입력에서 입력을 기다립니다.

이 시도:

beast:~ viroos$ grep foo

"foo"를 포함하는 줄을 입력하고 Enter 키를 누르면이 줄이 반복됩니다. 그렇지 않으면 커서가 새 줄로 이동하지만 grep은 아무 것도 인쇄하지 않습니다.


6
위에서 grep -r PATTERNGNU grep의 최신 버전으로 언급했듯이 표준 입력을 읽지 않고 현재 디렉토리에서 패턴을 검색합니다 ( commit 참조 ). 이 변경은 -r플래그 를 지정할 때 표준 입력을 검색하지 않기 때문에 의미가 있습니다 .
hluk

grep 버전을 확인했는데 2.10 이므로이 답변은 완벽하게 관련이 있습니다. Btw, 이제 새로운 버전의 grep에서 무엇을 기다려야하는지 알게 될 것입니다.

3

Maciek의 이전 답변은 다음과 같습니다.

실제로 어디에서나 검색하지 않습니다. 표준 입력에서 입력을 기다립니다.

그러나 데이터를 0 번째 첫 번째 설명 자로 파이프하여 / proc을 사용할 수 있으면 이미 실행중인 프로그램의 표준 입력에 쓸 수 있습니다.

한 터미널에서

grep "hello"

그리고 무한정 기다립니다 ... 다른 터미널에서 다음을 입력하십시오 :

echo "hello $USER" > /proc/`pgrep grep`/fd/0

첫 번째 터미널 인쇄 hello 및 사용자 이름을 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.