tail -f path
위의 내용은 파일 수정 사항을 즉시 출력하지만 출력에 필터를 적용하고 키워드가있을 때만 표시 xxx
하려고합니다.
이것에 접근하는 방법?
답변
유닉스를 사용하면 한 프로그램의 출력을 다른 프로그램으로 파이프 할 수 있습니다.
따라서 꼬리를 필터링하려면 grep을 사용할 수 있습니다.
tail -f path | grep your-search-filter
답변
짧은 답변: tail -f somefile | grep somepattern
그러나 이것은 부족한 경향이 있습니다. 자주 회전하는 파일을 마무리한다고 가정합니다 (디버그 로그인 경우 여러 번 회전 될 수 있음). 이 경우 tail -F
친구입니다. 차이점을 찾아 보도록하겠습니다.
그러나 tail -f
및 tail -F
추가이 경우, 그래서이 사용 사례에서 종종 바람직하지 않다 첫번째 라인의 무리를 인쇄-n0
tail -F -n0 somefile | grep somepattern
다른 필터링을 원할 때까지는 괜찮을 것이고 버퍼링에주의해야합니다. stdout은 터미널에 쓸 때 기본적으로 라인 버퍼링 되지만 파이프에 쓸 때 완전히 버퍼링되는 경우입니다. 따라서 다음 tail
은 명시 적으로 라인 버퍼링 되기 때문에 (또는 각 라인의 끝에서 출력을 플러시하기 때문에) 출력 이 발견되면 바로 라인을 방출 grep
하며 출력이 터미널로 이동하기 때문에 라인 버퍼링됩니다.
tail -F -n0 somefile | grep somepattern
그러나 그런 다음 출력을 처리 awk
하거나 cut
추가 처리 하기로 결정합니다 .
tail -F -n0 somefile | grep somepattern | awk '{print $3}'
이제 로그의 양에 따라 출력이 어디로 갔는지 궁금해 할 수 있습니다. 출력을 얻을 수 있지만 stdout이 grep
완전히 버퍼링 된 방식으로 작동 하기 때문에 한 번에 한 페이지가됩니다. 따라서 awk
한 번에 4kB의 입력을받습니다 (기본적으로).
이 경우 옵션 grep
을 사용하여 항상 stdout 라인을 버퍼링하도록 지시 할 수 있습니다 --line-buffered
.
tail -F -n0 somefile | grep --line-buffered somepattern | ...
그러나 대부분의 명령에는의 아날로그가 없습니다 --line-buffered
. 더 많은 스크립트 가능한 도구의 경우 함수를 사용하여 출력을 플러시 할 수 있습니다 (예 : in awk
은 함수가 fflush()
C와 동일한 이름을 공유하고 Perl 및 Python과 같은 도구는 비슷한 것을가집니다).
cut
당신 과 같은 사람들 은 운이 좋지 않을 것입니다. …하지만 검색을 시도 할 수 있습니다 unbuffer
. expect
툴 체인에서 제공 한 것으로 생각합니다 (사용한 적이 없습니다).
이 정보가 도움이 되었기를 바랍니다.
건배, 카메론
답변
여러 개의 파이프와 그렙을 사용할 수 있고 grep -v로 항목을 제외하고 grep -i로 대소 문자를 구분할 수 없습니다.
즉 : tail -100f / var / log / messages | grep -V ACPI | grep -i ata
끝에서 100 줄을 테일링하고 테일링을 유지하고, 먼저 ACPI를 사용하여 행을 제외하고 ata, ATA 또는 이들을 혼합 한 행을 표시하십시오.
또 다른 편리한 방법은 After, Before 및 Context 행 (이전 및 이후 행)에 대한 ABC 옵션입니다.