6

我希望在将输出从 tail -f 传输到 grep 后写入文件。比如说,在error_log“FreeSwitch.log”中为所有带有“Playing:”的行写入一个文件“temp”。

 tail -f "/var/lof/freeswitch/freeswitch.log" | grep "Playing:" > temp

但不工作!这是一个centos 5.5

4

4 回答 4

13

也许你有缓冲的问题?请参阅BashFAQ:什么是缓冲

您可以尝试:

tail -f /var/lof/freeswitch/freeswitch.log | grep --line-buffered "Playing:" > temp
于 2011-03-17T15:50:44.560 回答
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  

认为它会帮助你

于 2011-03-17T15:46:33.733 回答
1

你把文件名放在后面了>吗?

tail -f /var/lof/freeswitch/freeswitch.log | grep "Playing:" > temp
于 2011-03-17T15:34:47.503 回答
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
于 2015-03-24T16:06:32.037 回答