tail -f 결과를 grep으로 filtering 하여 저장하는 방법 문의드립니다.

sharukee의 이미지

#mylog file 이 아래와 같을 때, tail -f 결과중 Error 라인만 파일로 저장하고 싶은데요...
Error 1
Info 1
Error 2
Info 2

1. TRY1.
tail -f mylog | grep Error > mylog_tail.out

2. TRY2.
tail -f mylog | grep Error | tee mylog_tail.out

해봤습니다만, 아무것도 안나와서 문의드립니다.

실시간 로그중 Error 사항들만 파일로 발라내고 싶어서요.

sharukee의 이미지

원인은 grep이 buffering을 하기 때문이군요....

해결책은
1. GNU grep을 사용한다면, --line-buffered 옵션을 주면 되구요.
예) tail -f mylog | grep --line-buffered Error > mylog_tail.out

2. GNU grep이 아니라면(unix 환경에서 GNU grep이 없다면)
예)
tail -f mylog | while read LINE
do
echo "${LINE}" | grep Error >> mylog_tail.out
done

로 해결됩니다.

보고싶다. 미치도록......얼마나 더 가야 하나.......끝.