it-swarm-ko.tech

grep과 tail -f?

tail -f (또는 유사) 파일에서 동시에 grep? 나는 그런 종류의 행동을 찾는 다른 명령을 신경 쓰지 않을 것입니다.

30
xenoterracide

GNU tail 및 GNU grep)를 사용하여 tail -f 간단한 구문 사용 :

tail -f /var/log/file.log | grep search_term
48
Steven D

--line-bufferedgrep에 추가하면 지연이 줄어 듭니다. 어떤 경우에는 매우 유용합니다.

tail -f foo | grep --line-buffered bar
7
Digit

잘 작동합니다. 보다 일반적으로, grep는 프로그램이 출력하지 않을 때까지 대기하고 출력이 들어 오면 계속 읽습니다.

$ (echo foo; sleep 5; echo test; sleep 5) | grep test

5 초 동안 아무 일도 일어나지 않으면 grep은 일치하는 "test"를 출력 한 다음 5 초 후에 파이프 프로세스가 종료 될 때 종료됩니다.

7
Michael Mrozek

grep의 결과를 tail -f . tail -f 필터링 및 색상 지정 기능, 특히 multitail ( examples ).

이 사람들이 모두 tail -f, 그러나 나는 그것의 한계를 좋아하지 않습니다! 새로운 줄을 보면서 파일을 검색하는 가장 좋아하는 방법은 다음과 같습니다 (예 : 일반적으로 cron 작업을 통해 주기적으로 실행되는 프로세스의 리디렉션 된 출력에 추가되는 로그 파일 작업).

 tail -Fn+0 /path/to/file|grep searchterm

이것은 GNU 꼬리와 grep을 가정합니다. 꼬리 맨 페이지 (GNU coreutils, 내 버전은 v8.22)에서 지원하는 세부 사항 [ https : //www.gnu. org/software/coreutils/manual/coreutils.html] :

 -F     same as --follow=name --retry
 -n, --lines=K
         output the last K lines, instead of the last 10; or use -n +K to output
         starting with the Kth.
         If  the first character of K (the number of bytes or lines)
         is a '+', print beginning with the Kth item from the start
         of each file, otherwise, print the last K items in the file.
         K may have a multiplier suffix: b 512, kB 1000, K 1024, MB
         1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024,
         and so on for T, P, E, Z, Y.

  With --follow (-f), tail defaults to following the file descriptor,
  which means that even if a tail'ed file is renamed, tail will
  continue to track its end.  This default behavior is  not  desirable
  when  you  really  want  to  track the actual name of the file, not
  the file descriptor (e.g., log rotation).  Use --follow=name in
  that case.  That causes tail to track the named file in a way that
  accommodates renaming, removal and creation.

내 명령의 꼬리 부분은 tail --follow --retry --lines=+0 (여기서 마지막 인수는 0 행을 건너 뛰면서 처음에 시작하도록 지시 함).

2
wajiii
tail -f access | awk '/ADD/{print $0}'

위의 것을 사용하면 보통 사용합니다.

1
user4553

효과가있다. 그러나 출력이 더 이상 순간적이지 않도록주의하십시오. 파이프를 통해 버퍼링됩니다.

0
mouviciel

Netcat을 사용하면 새로운 결과가 쉽게 나오기 때문에 tail -f의 결과를 grep 할 수 있습니다.

Sudo nc -s localhost -l -p 1337 | grep ssh


tail -f /var/log/file.log | nc 127.0.0.1 1337

그러면 grep이 포트 1337에서 들어오는 입력 결과를 수신하도록 설정됩니다.
두 번째 명령은 tail -f의 출력을 netcat에 파이프하고이를 localhost 1337로 보냅니다. 로컬로 수행하려면 두 명령 세트 각각에 대해 ttys를 전환하거나 screen과 같은 것을 사용해야합니다.

0
Justin S