Bash-在每个grep对应关系上运行命令而不停止尾部-n0 -f

问题描述 投票:0回答:2

我正在监视日志文件,我的最终目标是编写一个使用tail -n0 -f的脚本,并在grep找到对应关系后执行某个命令。我目前的代码:

tail -n 0 -f $logfile | grep -q $pattern && echo $warning > $anotherlogfile

这只能工作一次,因为grep -q在找到匹配时会停止。脚本必须继续搜索并运行命令,因此我可以更新状态日志并运行另一个脚本来自动修复问题。你能给我一个提示吗?

谢谢

bash grep pipe tail
2个回答
1
投票

使用while循环

tail -n 0 -f "$logfile" | while read LINE; do
    echo "$LINE" | grep -q "$pattern" && echo "$warning" > "$anotherlogfile"
done

1
投票

awk将让我们继续处理线条并在找到模式时采取行动。就像是:

tail -n0 -f "$logfile" | awk -v pattern="$pattern" '$0 ~ pattern {print "WARN" >> "anotherLogFile"}'

如果你需要传递警告信息和anotherLogFile路径,你可以使用更多的-v标志来awk。此外,你可以让awk采取你想要的行动。它可以通过system()函数运行命令,您可以在其中传递shell命令来运行

© www.soinside.com 2019 - 2024. All rights reserved.