^cron/script\.sh.*
.*script\.sh [0-9]+$
在这种情况下,只有与给定模式匹配的日志才会被选择。过滤的原因是可能会有很多日志消息,每天高达1 GB。
现在是我的主要问题。由于有很多网络元素,而且有几种类型,每个元素在路径中都有不同的参数...是否有任何方法可以自动生成一组正则表达式,以某种方式对日志进行分组?系统可以从历史数据中学习,例如从上周开始。生成的正则表达式不必非常准确,它应该是提示用户将这样的新规则添加到系统中的提示。
我正在考虑无监督机器学习将输入分成组,然后在每个组中找到合适的正则表达式。是否有其他更快或更好的方法?最后但并非最不重要的是,如何找到与获取的组中所有字符串匹配的正则表达式?(非平凡的,所以“.*”不是答案。)
编辑一些思考后,我将尝试简化问题。假设我已经对日志进行了分组。我想找到(最多)三个最大的子字符串(至少一个),这些子字符串在集合中的所有字符串中都是共同的。例如:
Set of strings:
cron/script1.sh -abc 1243 all
cron/script2.sh 1
bin/script1.sh -asdf 15
Obtained groups:
/script
.sh
现在我可以通过使用.*?
将这些组连接起来来构建一些简单的正则表达式。在这个例子中,它将是.*?(/script).*?(\.sh ).*?
。这似乎是一个更简单的解决方案。
.*?
连接起来就足够了。 - Archie