Bash- 运行 一个命令在每个grep对应上不停止 tail -n0 -f

Bash- Running a command on each grep correspondence without stopping tail -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" '[=10=] ~ pattern {print "WARN" >> "anotherLogFile"}'

如果您需要将警告消息和路径传递给 anotherLogFile,您可以使用更多 -v 标志来 awk。此外,您可以让 awk 执行您想要的操作。它可以通过 system() 函数 运行 命令,您将 shell 命令传递给 运行