在将输出从 tail -f 通过管道传输到 grep 后写入文件
Posted
技术标签:
【中文标题】在将输出从 tail -f 通过管道传输到 grep 后写入文件【英文标题】:write to a file after piping output from tail -f through to grep 【发布时间】:2011-07-17 12:17:03 【问题描述】:我希望在将输出从 tail -f 传输到 grep 后写入文件。 比如说,将error_log“FreeSwitch.log”中所有带有“Playing:”的行写入一个文件“temp”。
tail -f "/var/lof/freeswitch/freeswitch.log" | grep "Playing:" > temp
但不工作!这是一个centos 5.5
【问题讨论】:
【参考方案1】:感谢您的帮助。
这是我用“错误”一词插入 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
【讨论】:
【参考方案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
认为它会帮助你
【讨论】:
【参考方案3】:也许您对缓冲有疑问?见BashFAQ: What is buffering?
你可以例如试试:
tail -f /var/lof/freeswitch/freeswitch.log | grep --line-buffered "Playing:" > temp
【讨论】:
为我工作并修复了原始问题试图做的事情。此答案应标记为正确答案。【参考方案4】:你把文件名放在>
后面了吗?
tail -f /var/lof/freeswitch/freeswitch.log | grep "Playing:" > temp
【讨论】:
以上是关于在将输出从 tail -f 通过管道传输到 grep 后写入文件的主要内容,如果未能解决你的问题,请参考以下文章
我可以将多个 ffmpeg 输出通过管道传输到不同的管道吗?
是否可以在 Mac 上将 Xamarin 输出通过管道传输到 less 中?