代码之家  ›  专栏  ›  技术社区  ›  madsantos

Bash-在不停止tail的情况下对每个grep通信运行命令-n0-f

  •  0
  • madsantos  · 技术社区  · 6 年前

    我目前正在监视一个日志文件,我的最终目标是编写一个使用 tail -n0 -f 并执行某个命令一次 grep 查找通信。我的当前代码:

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

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

    谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   John Kugelman Michael Hodel    6 年前

    使用while循环

    tail -n 0 -f "$logfile" | while read LINE; do
        echo "$LINE" | grep -q "$pattern" && echo "$warning" > "$anotherlogfile"
    done
    
        2
  •  1
  •   Eric Renouf    6 年前

    awk 将让我们继续处理行,并在发现模式时采取行动。类似于:

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

    如果需要将警告消息和路径传递给 anotherLogFile 您可以使用更多 -v 标志到 awk公司 . 还有,你可以 awk公司 采取你想要的行动。它可以通过 system() 传递shell命令以运行的函数