首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Grep正则表达式不包含字符串

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

Stack Overflow用户
提问于 2012-05-02 18:06:40
回答 3查看 318.7K关注 0票数 235

我正在将正则表达式模式列表传递给grep,以检查syslog文件。它们通常匹配IP地址和日志条目;

代码语言:javascript
复制
grep "1\.2\.3\.4.*Has exploded" syslog.log

它只是一个模式列表,就像我在循环中传递的"1\.2\.3\.4.*Has exploded"部分一样,所以我不能传递"-v“。

我在尝试做上面的相反操作时感到困惑,并且不匹配具有特定IP地址的行,因此“!1.2.3.4.*已爆炸”将匹配除1.2.3.4以外的任何syslog行,并告诉我它已爆炸。I必须能够包含不匹配的IP。

我在StackOverflow上看到过很多类似的帖子。但是,它们使用了正则表达式模式,而我似乎不能使用grep。有人能为grep提供一个工作示例吗?

更新:这是在这样的脚本中发生的;

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-02 18:10:13

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

代码语言:javascript
复制
grep "${PATT}" file | grep -v "${NOTPATT}"
票数 449
EN

Stack Overflow用户

发布于 2012-05-02 18:12:18

代码语言:javascript
复制
(?<!1\.2\.3\.4).*Has exploded

您需要使用-P运行此命令,以获得负向后视(Perl正则表达式),因此命令为:

代码语言:javascript
复制
grep -P '(?<!1\.2\.3\.4).*Has exploded' test.log

尝尝这个。如果该行前面有1.2.3.4,它会使用负向查找来忽略该行。希望这能有所帮助!

票数 17
EN

Stack Overflow用户

发布于 2013-09-05 21:55:14

代码语言:javascript
复制
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

应该与相同

代码语言:javascript
复制
egrep "(1\.2\.3\.4.*Has exploded|5\.6\.7\.8.*Has died)" logfile.log | egrep -v "9\.10\.11\.12.*Has exploded"    
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10411616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档