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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash-在每个grep对应关系上运行命令而不停止尾部-n0 -f相关的知识,希望对你有一定的参考价值。

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

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

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

谢谢

答案

使用while循环

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

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

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

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

以上是关于Bash-在每个grep对应关系上运行命令而不停止尾部-n0 -f的主要内容,如果未能解决你的问题,请参考以下文章

bash的多命令执行,shell脚本基础及grep系

从 Bash 脚本执行 GREP/CUT 命令时遇到问题

bash 中的 awk 命令:如何停止添加新行?

如何在 ssh / 远程 bash 命令中转义单引号字符?

如何在Docker容器中运行Nginx而不停止?

bash: while read loop - 如果有变量 sshpass 则停止