[linux] 연속 스트림을 ‘grep’하는 방법은 무엇입니까?

사용 가능합니까 grep연속 스트림 있습니까?

내가 의미하는 것은 일종의 tail -f <file>명령이지만 grep관심있는 줄만 유지하기 위해 출력이 있습니다.

나는 시도 tail -f <file> | grep pattern했지만 끝났을 grep때만 실행될 수있는 것처럼 보입니다 tail.



답변

grepBSD grep (FreeBSD, Mac OS X 등)을 사용할 때의 라인 버퍼링 모드를 켜십시오

tail -f file | grep --line-buffered my_pattern

기본적으로 플러시되므로 GNU grep (거의 모든 Linux에서 사용)에 대해서는이 작업을 수행 할 필요가 없습니다 (SmartOS, AIX 또는 QNX와 같은 다른 유닉스 계열의 경우 YMMV).


답변

나는 tail -f <file> | grep <pattern> 항상 .

grep이 끝날 때까지 기다리지 않고 기다릴 것입니다 (우분투를 사용하고 있습니다).


답변

문제는 grep이 일부 출력 버퍼링을 사용한다는 것입니다. 시험

tail -f file | stdbuf -o0 grep my_pattern

grep의 출력 버퍼링 모드를 unbuffered로 설정합니다.


답변

꼬리가 아닌 전체 파일 에서 일치 항목을 찾고 새 일치 항목을 기다리고 기다리려면 다음과 같이하십시오.

tail -c +0 -f <file> | grep --line-buffered <pattern>

-c +0플래그는 출력을 시작해야 함을 말한다 0바이트 ( -c시작 (에서) +파일을).


답변

대부분의 경우, 가능 tail -f /var/log/some.log |grep foo하며 제대로 작동합니다.

실행중인 로그 파일에 여러 그렙을 사용해야하고 출력이없는 것을 발견하면 다음과 같이 --line-buffered스위치를 중간 그렙 에 붙여야합니다 .

tail -f /var/log/some.log | grep --line-buffered foo | grep bar


답변

당신은이 답변을 향상으로 생각할 수 있습니다 .. 보통 나는 사용하고 있습니다

tail -F <fileName> | grep --line-buffered  <pattern> -A 3 -B 5

파일 회전의 경우 -F가 더 좋습니다 (파일이 회전하면 -f가 제대로 작동하지 않음)

-A와 -B는 패턴 발생 직전과 직후에 라인을 얻는 데 유용합니다.이 블록은 점선 구분 기호 사이에 나타납니다.

하지만 저에게는 다음을 선호합니다

tail -F <file> | less

스트리밍 로그 내부를 검색하려는 경우 매우 유용합니다. 앞뒤로 깊게 쳐다 봐


답변

아무도 내 평소 이동을 제공하는 것을 보지 못했습니다.

less +F <file>
ctrl + c
/<search term>
<enter>
shift + f

ctrl + c언제든지 파일을 중지하고 탐색 하는 데 사용할 수 shift + f있으며 실시간 스트리밍 검색으로 돌아 가기 위해 사용할 수 있기 때문에 이것을 선호합니다 .