【发布时间】:2012-09-24 04:24:14
【问题描述】:
我正在使用 tail 读取更新的日志文件,如果 grep 返回特定字符串,我希望退出循环。我不确定如何“以编程方式”退出或终止进程
有人有什么好主意吗? 这是一些示例脚本:
tail -f /var/log/{system.log,kernel.log} | grep -i "vendor: 0x22b8"
谢谢:)
【问题讨论】:
我正在使用 tail 读取更新的日志文件,如果 grep 返回特定字符串,我希望退出循环。我不确定如何“以编程方式”退出或终止进程
有人有什么好主意吗? 这是一些示例脚本:
tail -f /var/log/{system.log,kernel.log} | grep -i "vendor: 0x22b8"
谢谢:)
【问题讨论】:
使用具有最大计数的grep:
tail -f /var/log/{system.log,kernel.log} | grep -i "vendor: 0x22b8" -m 1
【讨论】:
你可以像这样有效地做到这一点:
tail -f /var/log/{system.log,kernel.log} | awk '
{print}
/vendor: 0x22b8/ {exit}
'
awk 命令将在第一次看到您的字符串时退出。由于 SIGPIPE 机制,tail 命令将在下次尝试写入管道时被终止。
【讨论】: