You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Grep过滤日志:排除前置含Failed to connect的Exception行

过滤关联"Failed to connect"的Exception日志解决方案

针对你遇到的问题——过滤掉前一行是"Failed to connect"的Exception行(包括对应的Failed行),以下是几种可行的方案,适配你的GNU grep 3.4版本:

方法1:用awk脚本(最可靠直观)

awk适合处理这种依赖上下文的行过滤需求,直接运行以下单行命令即可:

awk 'BEGIN{skip=0} {if(skip){skip=0;next} if($0~/Failed to connect/){getline n;if(n~/Exception/){skip=1;next}else{print $0;print n}} else{print $0}}' filename

逻辑说明:遇到"Failed to connect"行时,提前读取下一行,若下一行是Exception则直接跳过这两行;否则正常打印这两行。其他所有行直接输出。

方法2:用GNU grep的多行匹配

利用GNU grep支持的Perl正则(-P)和null分隔模式(-z),将整个文件视为单个字符串进行匹配过滤:

grep -z -v 'Failed to connect\n.*Exception' filename | tr '\0' '\n'

原理是把文件内容用null字符连接成一行,移除所有包含"Failed to connect"后跟换行和Exception的片段,最后再把null字符换回换行符。适合单行Exception的场景。

方法3:组合grep与sed过滤上下文块

先提取所有Exception及其前一行,再过滤掉包含"Failed to connect"的上下文块,同时移除grep生成的分隔符:

grep -B1 "Exception" filename | grep -v -B1 -A1 "Failed to connect" | sed '/^--$/d'

这里-B1 -A1确保把"Failed to connect"和对应的Exception行一起过滤掉,最后用sed删除grep自动生成的分隔线--。


内容的提问来源于stack exchange,提问作者Dominique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:05:35