grep and tail -f? 할 수 grep있습니까? 나는 그런 종류의

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



답변

GNU tail와 GNU를 사용하여 간단한 구문을 사용하여 grepgrep 할 수 tail -f있습니다.

tail -f /var/log/file.log | grep search_term


답변

잘 작동합니다. 더 일반적으로 grep프로그램이 출력되지 않을 때까지 기다렸다가 출력이 들어 오면 계속 읽습니다.

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

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


답변

추가 --line-bufferedgrep, 그것은 당신을 위해 지연을 줄일 수 있습니다. 어떤 경우에는 매우 유용합니다.

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


답변

의 출력을 grep로 파이프tail -f 할 수 있습니다 . tail -f기능과 필터링 및 색상, 특히 멀티 테일 ( 🙂 을 결합한 프로그램도 있습니다 .


답변

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

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

이것은 GNU tail과 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 줄을 건너 뛰도록 지시합니다.


답변

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

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


답변

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로 파이프하여 로컬 호스트 1337로 전송합니다. 로컬로 수행하려면 두 명령 세트 각각에 대해 tty를 전환해야합니다. 또는 화면과 같은 것을 사용하십시오.