Saya pikir masalah Anda adalah grep menggunakan beberapa buffering keluaran. Coba
tail -f file | stdbuf -o0 grep my_pattern
itu akan menyetel mode buffering keluaran grep ke unbuffered.
Aktifkan grep
mode penyangga baris saat menggunakan BSD grep (FreeBSD, Mac OS X dll.)
tail -f file | grep --line-buffered my_pattern
Sepertinya beberapa waktu yang lalu --line-buffered
tidak masalah untuk GNU grep (digunakan di hampir semua Linux) karena di-flush secara default (YMMV untuk Unix-like lainnya seperti SmartOS, AIX atau QNX). Namun, per November 2020, --line-buffered
diperlukan (setidaknya dengan GNU grep 3.5 di openSUSE, tetapi tampaknya secara umum diperlukan berdasarkan komentar di bawah).
Saya menggunakan tail -f <file> | grep <pattern>
sepanjang waktu.
Ini akan menunggu sampai grep memerah, tidak sampai selesai (saya menggunakan Ubuntu).
Jika Anda ingin menemukan kecocokan di keseluruhan file (bukan hanya ekor), dan Anda ingin duduk dan menunggu kecocokan baru, ini bekerja dengan baik:
tail -c +0 -f <file> | grep --line-buffered <pattern>
-c +0
flag mengatakan bahwa output harus dimulai 0
byte (-c
) dari awal (+
) dari file.