답변:
grep을 사용하십시오. 그것은 그 목적을 위해 만들어졌습니다.
/ var / log / syslog의 꼬리에서 "cron"이있는 행을 찾으려면 다음을 실행하십시오.
tail -f /var/log/syslog | grep cron
그리고 stdin 이상의 것을 허용하므로, 위와 같은 방식으로 배관하여 (| 기호 사용) 다른 명령의 출력에서도 사용할 수 있습니다.
간단하지는 않지만 흥미로운 추가 유연성을 제공 할 수있는 몇 가지 다른 아이디어가 있습니다.
먼저 grep 대신 awk로 필터링 할 수 있습니다.
tail -f /var/log/messages | awk '/myfilterword/'
사용하는 예제와 정확히 동일하게 작동합니다 grep
. awk의 힘을 사용하여이를 확장 할 수 있습니다. 예를 들면 다음과 같습니다.
tail -f /var/log/messages | \
awk '/myfilterword/ { for (i=6; i<=NF; i++) printf("%s ", $i); printf("\n")}'
출력의 마지막 필드부터 6 번째 필드까지 인쇄됩니다 (필드는 공백으로 구분됨)
또 다른 유사한 아이디어는 perl one-liner를 사용하는 것입니다.
tail -f /var/log/messages | perl -ne "/myfilterword/ and print"
정확히 똑같이 작동합니다 grep
. 행 번호 카운터와 6 번째 필드 만 원하십니까? 이것은 어떤가요:
tail -f /var/log/messages | \
perl -lane "/myfilterword/ and printf \"%6d %s\n\",++\$a,\$F[6]"
분명히 이러한 모든 종류의 작업은 다른 도구로도 수행 할 수 있지만 여기에 awk 또는 perl과 같은 일반적인 언어를 사용하는 재미있는 방법이 있음을 설명하고 싶었습니다.
grep
더 긴 파이프 라인의 일부와 같이 비 대화식으로 사용될 때 버퍼링 한다는 것을 인식하는 것이 중요합니다 . GNU grep 2.5.1은--line-buffered
파이프 라인에서 grep을 제거하는 것이 옵션이 아닌 경우이 문제를 해결할 수 있는 옵션을 제공합니다 . grep이 버퍼를 말할 때 버퍼가 4k와 같은 수준에 도달 할 때까지 출력이 표시되지 않음을 의미합니다.