我希望在将输出从 tail -f 传输到 grep 后写入文件。比如说,在error_log“FreeSwitch.log”中为所有带有“Playing:”的行写入一个文件“temp”。
tail -f "/var/lof/freeswitch/freeswitch.log" | grep "Playing:" > temp
但不工作!这是一个centos 5.5
也许你有缓冲的问题?请参阅BashFAQ:什么是缓冲?
您可以尝试:
tail -f /var/lof/freeswitch/freeswitch.log | grep --line-buffered "Playing:" > temp
-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
认为它会帮助你
你把文件名放在后面了>
吗?
tail -f /var/lof/freeswitch/freeswitch.log | grep "Playing:" > temp
谢谢你的帮助。
这是我用“错误”一词插入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