当前位置: 首页 > 知识库问答 >
问题:

Grep正则表达式不包含字符串

尉迟高澹
2023-03-14

我将一个regex模式列表传递给< code>grep来检查syslog文件。它们通常匹配IP地址和日志条目;

grep "1\.2\.3\.4.*Has exploded" syslog.log

这只是一个模式列表,例如我正在循环传递的“1\.2\.3\.4.*已爆炸”部分,因此我无法传递“-v”。

我很困惑试图做上述的逆,不匹配线与某个IP地址和错误!1.2.3.4.*已爆炸”将匹配除1.2.3.4告诉我它已爆炸之外的任何syslog行。我必须能够包括一个IP地址不匹配。

在Stack Overflow上看到过各种类似的帖子。然而,他们使用正则表达式模式,我似乎无法使用< code>grep。< code>grep的工作示例是什么?

这是在这样的脚本中发生的;

patterns[1]="1\.2\.3\.4.*Has exploded"
patterns[2]="5\.6\.7\.8.*Has died"
patterns[3]="\!9\.10\.11\.12.*Has exploded"

for i in {1..3}
do
  grep "${patterns[$i]}" logfile.log
done

共有3个答案

寿卜鹰
2023-03-14

似乎没有人发布过所有答案中最好的混合,正则表达式(< code>-E)和匹配反转(< code>-v)

grep -Ev 'pattern1|pattern2|pattern3' file

值得注意的是,不需要四处查找,因此如果您的 grep 版本没有可用的 -P,这有效。

诸葛文博
2023-03-14
(?<!1\.2\.3\.4).*Has exploded

您需要使用-P运行它才能有负查找(Perl正则表达式),所以命令是:

grep -P '(?<!1\.2\.3\.4).*Has exploded' test.log

试试这个。如果该行前面是< code>1.2.3.4,它将使用负后视来忽略该行。

邓光耀
2023-03-14

grep 匹配,grep -v 做相反的事情。如果你需要“匹配A但不匹配B”,你通常使用管道:

grep "${PATT}" file | grep -v "${NOTPATT}"
 类似资料:
  • 我需要一些“包含”和“不包含”的正则表达式。通常我会写: 包含:(.*WORD_A.*)$,不包含:(^((?!WORD_A.*)*)$ 如果单独使用,这很好,但我想写一些可以检测到的东西,比如“包含单词A和单词B”(顺序不相关!)和“包含单词A,但不包含单词B)。 基本上,我希望用户可以做出这样的声明“以单词a开头,包含单词B,但不是C和/或以D结尾”,程序返回真/假。最好的办法是只附加正则表达

  • 问题内容: 我有此RequestMapping: 我想添加该RequestMapping: 因此,它可以服务于所有“无出发”路线。但是,这会产生冲突,因为“ / route / to-destination-from-departure” URL实际上也与第二个RequestMapping匹配…很公平,所以我的解决方案是指定一个正则表达式: 因此,如果“目标”包含“ -from-”,则Reques

  • 我发现正则表达式不包含101,如下所示: 0*1*0*(1 00 000)*(010)* 我无法理解作者是如何想出这个正则表达式的。所以我只想到了不包含101的字符串: 01000100 我似乎上面的字符串不会与上面的正则表达式匹配。但我不确定。所以尝试在regex101.com上翻译成等效的pcre正则表达式,但也失败了(因为可以看到我的正则表达式甚至不匹配包含单个1的字符串。 我的翻译有什么问

  • 问题内容: 我正在寻找符合以下规则的正则表达式。 允许的字符 字母:az / AZ 数字:0-9 特殊字符:〜@#$ ^&*()-_ + = [] {} | \,。?:( 应允许使用空格) 不允许 特殊字符:<>’“ /;`% 问题答案: 对于允许的字符,您可以使用 验证应仅由允许的字符组成的完整字符串。请注意,在结尾处(否则将是一个范围),并且转义了几个字符。 对于无效字符,您可以使用 检查他们

  • 问题内容: 我想匹配任何不包含字符串“ DontMatchThis”的字符串。 什么是正则表达式? 问题答案: 尝试这个:

  • 问题内容: 我对和都错了。我想检查哈希是否仅包含数字。我错过了什么? 问题答案: 应该这样做。原始匹配的任何内容都只包含一位数字。