我希望在从tail -f到grep的管道输出之后写入文件。 比如说,在error_log“FreeSwitch.log”中写入“播放:”所有行的文件“temp”。
tail -f "/var/lof/freeswitch/freeswitch.log" | grep "Playing:" > temp
但没有工作!这是一个5.5美元
答案 0 :(得分:12)
也许你有缓冲问题?请参阅BashFAQ: What is buffering?
你可以,例如尝试:
tail -f /var/lof/freeswitch/freeswitch.log | grep --line-buffered "Playing:" > temp
答案 1 :(得分:2)
-f, --follow[={name|descriptor}]
output appended data as the file grows;
它会随着文件的增长扫描文件。这是一个间隔的过程。你只能打断它。
使用参数:
-c, --bytes=K
output the last K bytes; alternatively, use -c +K to output bytes starting with the Kth of each file
或
-n, --lines=K
output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth
编辑:正如bmk所说:
grep --line-buffered
认为它会帮助你
答案 2 :(得分:1)
您是否将文件名放在>
之后?
tail -f /var/lof/freeswitch/freeswitch.log | grep "Playing:" > temp
答案 3 :(得分:0)
感谢您的帮助。
这是我的代码,用“错误”一词插入mysql:
tail -f /var/log/httpd/error_log | \
grep -E --line-buffered "error" | \
while read line; do \
#echo -e "MY LINE: ${line}"; done
echo "INSERT INTO logs (logid,date,log) VALUES (NULL, NOW(), '${line}');" | mysql -uUSERDB -pPASSDB DBNAME; done