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

在Unix系统中如何不使用jq从JSON文件提取byteCount值?

如何在无jq工具时用sed或grep提取JSON中的byteCount值

假设你有这样的JSON内容:

{ "listingRequest": { "id": "016a1050-82dc-1262-cc9b-4baf3e0b7123", "uri": "http://localhost:9090/nifi-api/flowfile-queues/016a104a-82dc-1262-7d78-d84a704abfbf/listing-requests/016a1050-82dc-1262-cc9b-4baf3e0b7123", "submissionTime": "04/28/2019 19:40:58.593 UTC", "lastUpdated": "19:40:58 UTC", "percentCompleted": 0, "finished": false, "maxResults": 100, "state": "Waiting for other queue requests to complete", "queueSize": { "byteCount": 480, "objectCount": 20 }, "sourceRunning": false, "destinationRunning": false } }

你想要提取byteCount对应的数值480,但因为公司限制没法用jq这类工具,之前尝试的grep -Po '"byteCount":.*?[^\\]",'没得到输出,下面给你两个可行的方案:

方案一:使用grep的Perl正则模式

你之前的命令问题在于正则匹配的范围不对,我们可以调整正则,精准定位到byteCount后的数值:

grep -Po '"byteCount":\s*\K\d+' your_json_file.json
  • -P:启用Perl兼容正则表达式
  • -o:只输出匹配的部分
  • \K:忽略前面匹配的内容(也就是"byteCount":和可能的空格),只保留后面的数字部分

如果是直接从管道输入(比如通过curl获取的内容),可以这样用:

echo '你的JSON内容' | grep -Po '"byteCount":\s*\K\d+'

方案二:使用sed命令

如果你的环境里grep不支持-P参数,也可以用sed来实现:

sed -n 's/.*"byteCount":\s*\([0-9]*\).*/\1/p' your_json_file.json
  • -n:不默认输出每一行
  • s/.../.../p:替换模式,把整行内容替换成我们捕获的数字部分,然后打印出来
  • \([0-9]*\):捕获byteCount后面的数字,\1引用这个捕获的内容

同样,管道输入的话:

echo '你的JSON内容' | sed -n 's/.*"byteCount":\s*\([0-9]*\).*/\1/p'

这两个命令都能帮你直接得到480这个结果,而且不需要额外安装工具,完全依赖系统自带的grep和sed。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:36:54