如何在 Linux 日志里检索 nowStage 不等于 1 的数据

[复制链接]
发表于 9 小时前 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在 Linux 里排查日志时,经常需要把 nowStage 不等于 1 的 JSON 行单独捞出来。最省事的办法是先拿 grep 把带 nowStage 的行定位出来,再用 jq 按字段过滤。下面给出可直接用的命令组合。

第一步:grep 定位包含 nowStage 的行
  1. grep -rn "nowStage" ./
复制代码

这条命令会把包含 "nowStage" 字样的所有行,连同文件名和行号一起列出来,但还无法筛掉 nowStage != 1 的数据。

第二步:用 jq 按字段过滤(推荐)

如果日志是逐行 JSON,用 jq 把 nowStage 不等于 1 的行筛出来最稳:
  1. grep -rn "nowStage" ./ | jq -c 'select(.nowStage != 1)'
复制代码

先把 grep 的结果喂给 jq,select 里写字段判断,就能只保留 nowStage 不等于 1 的记录。

不装 jq 的粗略替代

临时不想装 jq,也可以用 grep -v 反向匹配做近似排除:
  1. grep -rn "nowStage" ./ | grep -v '"nowStage": ?1[,}]'
复制代码

这种正则只能挡住写法固定的情况,字段嵌得深或者格式有变就不灵了,字段较多时还是 jq 更可靠。

编辑提示

日志量很大时 jq 比纯 grep 慢,可以先 grep 缩小范围再接 jq;字段名区分大小写,nowStage 写成 NowStage 会捞不到。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表