linux中如何在日志里面检索nowStage不等于1的数据的指令
你想在 Linux 中查找日志文件中 nowStage 不等于 1 的所有 JSON 行,当前你已经使用了:
Bash
深色版本
grep -rn "nowStage" ./
这个命令可以找到包含 "nowStage" 字样的所有行及其所在的文件名和行号,但还不能筛选出 nowStage != 1 的数据。
✅ 正确做法:使用 grep + jq(推荐)或 grep -v 来过滤
✅ 方法一:使用 jq(处理 JSON 更专业)
💡 前提:需要安装 jq 工具(轻量级的命令行 JSON 处理器)
安装 jq(如未安装):
Bash
深色版本
# Ubuntu/Debian
sudo apt-get install jq
# CentOS/RHEL
sudo yum install jq
# macOS (Homebrew)
brew install jq
指令如下:
Bash
深色版本
grep -r "nowStage" ./ | jq 'select(.data.nowStage != 1)'
解释:
grep -r "nowStage" ./:先找出所有含有 nowStage 的行(可能是多文件)
| jq 'select(.data.nowStage != 1)':通过 jq 过滤出 nowStage 不等于 1 的 JSON 数据
✅ 这种方式最准确,不会误判文本内容,是解析 JSON 日志的首选方法。
✅ 方法二:纯文本方式(使用 grep -v)
如果你无法安装 jq,也可以使用正则表达式进行匹配,虽然不如 jq 精确,但在简单场景下可用。
查找 nowStage 不等于 1 的行:
Bash
深色版本
grep -r '"nowStage":\s*[^1]' ./
如果你想排除 nowStage": 1 或 nowStage": 12 等情况(更精确):
Bash
深色版本
grep -r '"nowStage":\s*[2-9]\|[1-9][0-9]' ./
或者结合 grep -v 排除掉 nowStage": 1 的情况:
Bash
深色版本
grep -r '"nowStage":' ./ | grep -v '"nowStage":\s*1\s*}'
📝 示例说明
日志样例:
Json
深色版本
{"rspCode":200,"data":{"orderId":"abc","nowStage":1,"allStage":12}}
{"rspCode":200,"data":{"orderId":"def","nowStage":2,"allStage":12}}
{"rspCode":200,"data":{"orderId":"ghi","nowStage":12,"allStage":12}}
上面的指令会输出后两条(nowStage 不等于 1 的数据)。
✅ 总结:推荐组合
方式 是否推荐 说明
grep + jq ✅✅✅ 强烈推荐 最准确、安全,适合处理 JSON 格式数据
grep -v + 正则 ✅ 临时可用 快速实现,但可能有误判风险
单独 grep "nowStage" ❌ 只能定位关键字,不能判断值是否为 1
🚀 最终推荐命令:
Bash
深色版本
grep -r "nowStage" ./ | jq 'select(.data.nowStage != 1)'