나는 오랫동안 내 Ubuntu/Mint 컴퓨터에서 일부 사용자 지정 별칭(예: alias grep='grep -irn --color --line-buffered'
.
디버깅을 시도하는 동안 문제의 옵션이 STDOUT을 grep'ping하는 대신 현재 디렉터리에서 재귀적으로 검색하는 재귀 옵션이라는 것을 알았습니다.
저는 현재 grep 2.16을 실행 중이고 예상대로 2.10을 실행하는 시스템을 발견했습니다.
예:
tail -f /var/log/xxx.log | grep -irn yyy
-r
-d recurse
다음 디렉토리 옵션 대신 / make grep 검색 폴더에 어떤 변경이 이루어졌습니까 man
?
-d ACTION, --directories=ACTION
If an input file is a directory, use ACTION to process it.
[...] If ACTION is recurse, read all files under each directory, recursively,
following symbolic links only if they are on the command line. This is
equivalent to the -r option.
답변1
이 답변은 댓글로 작성하는 것이 더 적합하지만 너무 길어서 답변으로 게시하겠습니다.
grep의 동작은 내 관심을 불러일으켰고 OP가 올바른 방향으로 가고 있다고 생각합니다. 또한 새로운 버전의 grep이 이전 버전과 다르게 동작한다는 것도 발견했습니다. 이전 버전에서는 를 사용할 때 인수를 전달하지 않으면 -r
문서에 따라 표준 입력에서만 패턴을 검색합니다 grep searches the named input FILEs (or standard input if no files are named, or if a single hyphen-minus (-) is given as file name) for lines containing a match to the given pattern
. 그러나 최신 버전에서는 파일 이름을 제공하지 않아도 현재 디렉터리에서 패턴을 검색합니다. 확인하다:
$ mkdir /tmp/grep-test
$ cd /tmp/grep-test
$ echo pam > FILE
$ grep --version
grep (GNU grep) 2.10
(...)
$ grep pam -r
pam
pam
$ /home/ja/grep/grep-2.16/src/grep pam -r
FILE:pam
변경 로그를 greping하는 것 외에 이와 관련된 변경 사항에 대한 언급을 찾지 못했습니다.이것:
** 행동 변화
-r(--recursive) 옵션은 이제 명령줄 기호 링크만 따릅니다. 또한 기본적으로 -r은 이제 명령줄에 명명된 장치만 읽습니다. 이는 --devices로 재정의될 수 있습니다. -R은 이전과 동일하게 작동하므로 기본적으로 모든 심볼릭 링크를 따르고 모든 장치를 읽는 이전 동작을 선호하는 경우 -R을 사용하십시오.
OP가 stdout을 재귀적으로 검색한 이유는 여전히 의문이지만 grep에서 확실히 변경된 사항이 있습니다.