我有以下信息:
Apr 12 12:48:02 poe true: sudo: nagios : command not allowed ; TTY=unknown ; PWD=/var/log/nagios
;
如何制作一个正则表达式来查找单词 Sudo 或 Command 但不查找单词 true?原因是我还有其他消息只包含单词 sudo 和 command,而我对查看包含这两个单词和第三个单词组合的消息不感兴趣。到目前为止,我尝试过:
1.(?=。*单词1)(?=。*单词2)2. 单词1。*单词2
它们都无法排除我不想要的单词。基本上,我希望结果集不包含那些包含 word3 以及 word1 和 word2 的消息,而是希望结果集包含 word1 或 word2。
谢谢!
(从评论中添加)
<30>Jun 11 12:42:02 true:/var/ossec/logs/alerts/alerts.log Apr 12 12:48:01 duffy sudo: nagios : command not allowed ; TTY=unknown ; PWD=/var/log/nagios;
<85>Apr 11 12:00:46 verne sudo: ndakjs2 : TTY=pts/0 ; PWD=/Defactor/2/rules/claimsfactor ; USER=NONE; COMMAND
如果您同时获取上述两条消息,我希望正则表达式匹配第二条消息,因为其中包含单词sudo
,但不匹配第一条消息,因为其中包含单词true
。我只对不含单词的结果集感兴趣TRUE
。虽然第一条消息中有Sudo
,但我不想要那条消息。
答案1
你想要这个
^(?!.*true).*$
这(?!...)
是一个负向预测运算符,用于检查是否存在任何单词。点击此处查看http://rubular.com/r/aYzwcfekrI
功劳归于这个问题。
您也可以使用常规程序来检查它是否包含该单词true
。
假设lines
是一组日志消息,它将是这样的
lines.each do |line|
puts line unless line.include?("true")
end
希望这可以帮助。