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

如何在Linux中用正则表达式提取JSON文件中的值?

解决bash正则提取JSON键值的问题

先指出你现有代码的几个问题:

  • 变量赋值错误:var=cat file.json 无法正确读取文件内容,必须用命令替换语法
  • 正则未适配JSON格式里的空格("abc": 后存在空格),匹配逻辑有误
  • 输出的是匹配的第1组(abc":),但你需要的是第2组的数值内容

修正后的代码

# 正确读取文件内容到变量
var=$(cat file.json)
# 适配空格、精准捕获双引号内的值
regex='"abc":\s*"([^"]+)"'
# 执行正则匹配
[[ $var =~ $regex ]]
# 输出目标捕获内容
echo "${BASH_REMATCH[1]}"

关键说明

  1. 变量赋值:$(cat file.json) 会把文件内容完整读取到var中,也可以用更高效的var=$(<file.json)
  2. 正则逻辑:
    • "abc": 精准匹配目标键名
    • \s* 匹配0个或多个空格,兼容JSON的格式规范
    • "([^"]+)" 捕获双引号内的内容,[^"]+表示匹配除双引号外的所有字符,避免贪婪匹配导致的错误
  3. 捕获组:BASH_REMATCH[1]对应正则中第一个括号内的捕获结果,也就是abc对应的值123

提取所有键值的通用方法

如果要批量提取所有键对应的值,可以用循环结合正则实现:

var=$(cat file.json)
# 同时匹配字符串值(带双引号)和数字值(不带双引号)
regex='"([^"]+)":\s*(?:"([^"]+)"|([0-9]+))'
# 循环遍历所有匹配结果
while [[ $var =~ $regex ]]; do
  echo "键: ${BASH_REMATCH[1]}, 值: ${BASH_REMATCH[2]:-${BASH_REMATCH[3]}}"
  # 截断已匹配的部分,继续处理剩余内容
  var=${var#*"${BASH_REMATCH[0]}"}
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:40:56