如何在“file-with-patterns”频繁变化的管道中使用“grep -f file-with-patterns”?

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

我正在尝试对已删除的防火墙事件进行动态日志记录,从而可以动态指定要记录的事件。

我用:

logread -f | grep -v -f file-with-patterns >> logfile

在后台运行的脚本中。

这工作正常,它会记录除那些我不想通过在文件“file-with-patterns”中指定模式来记录的事件之外的所有内容。

但是,当我更新文件“file-with-patterns”时,grep 似乎不会重新读取它。

更改文件“file-with-patterns”后,我需要终止并重新启动脚本来启动所有这一切,这有点麻烦。

是否可以在不重新启动脚本的情况下使其工作?例如,当 crontab 文件发生更改时,crontab 会自动重新读取它。 grep(或等效实用程序)中是否有某些功能可以像这样工作?

尝试更改 file-with-patterns,grep 没有更改其过滤。

linux scripting grep pipe
1个回答
1
投票

简单的方法是在每一行加载配置,我想性能会受到一点影响。沿着这些思路:

logread -f | while read LINE; do echo "$LINE" | grep -f file-with-patterns; done

为了便于(重新)使用,可以制作一个小型的概念教授操作程序:

 sudo nano /usr/bin/¬

#! /bin/bash

while read LINE; do echo "$LINE"; done | $*

然后你可以运行任何命令来代替 grep,如下所示:

logread -f |¬ grep -f file-with-patterns

更好的技巧是监视文件的更改并重新加载(如果存在)。一种方法是借助名为 inotifywait 的工具。沿着这些思路:

while inotifywait -e modify file-with-patterns; do logread -f | grep -f file-with-patterns; done

尝试一下,如果卡住了,请在评论中联系:)

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