正则表达式查找单词 1 或单词 2,但不查找单词 3

正则表达式查找单词 1 或单词 2,但不查找单词 3

我有以下信息:

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

希望这可以帮助。

相关内容