如何解决连续读取bash脚本中日志文件的最后一行
我有一个日志文件,其中不断写入新行。
我想要一个 bash 脚本来连续读取此日志文件的最后一行,以便我可以处理该行(例如,如果该行包含“错误”一词,则执行特定命令)。
我试过了:
while true
do
if tail -n1 -f file.log | grep -q ERROR
then
echo "$(date) : ERROR detected"
fi
done
但这是垃圾邮件:
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
sun 21 mar 2021 18:32:41 CET : ERROR detected
(在这个例子中每分钟添加一个新行)
如何只读取最后一行并且结果没有垃圾邮件?
解决方法
我建议使用 GNU grep:
tail -n1 -f file.log | grep --line-buffered ERROR | while read; do echo "$(date) : ERROR detected"; done
,
这正是发明 tail -f
的原因:
tail -f <logfile>
将显示日志文件的最后一行,以便您可以了解添加的内容。
这可以与 grep
结合使用:
tail -f <logfile> | grep <text_to_be_searched>
就你而言:
tail -f file.log | grep "ERROR"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。