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 命令传递给 运行
我目前正在监视一个日志文件,我的最终目标是编写一个使用 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 命令传递给 运行