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

如何用awk或sed提取并替换JSON格式中的Base64值?

解决JSON中Base64值的提取、解码与替换问题

首先得说,你之前用awk {'print $14'}没用是因为整个返回的JSON是单个连续的字符串,没有按空格拆分成多个字段,自然拿不到第14个元素。咱们换更靠谱的方法来处理:

一、最推荐的方法:用jq处理JSON(专业工具少踩坑)

jq是专门用来处理JSON数据的工具,比awk/sed适合太多了,步骤如下:

1. 提取Base64值

直接从JSON里精准提取Value字段的内容:

curl -s --request GET http://10.0.10.10:8500/v1/kv/w-key-value | jq -r '.[0].Value'
  • -r参数是让jq输出原始字符串(不带双引号),方便后续解码。

2. 提取并解码Base64,再取第14个字段

把提取到的Base64直接解码,然后用awk拿你要的第14个元素:

curl -s --request GET http://10.0.10.10:8500/v1/kv/w-key-value | jq -r '.[0].Value' | base64 -d | awk '{print $14}'

解码后你的内容是[{ CreateIndex: 100, ModifyIndex: 200, LockIndex: 200, Key: zip, Flags: 0, Value: 1 Session: adf4238a-882b-9ddc-4a9d-5b6758e4159e }],第14个字段就是adf4238a-882b-9ddc-4a9d-5b6758e4159e,刚好是你要的Session值。

二、用awk/sed提取Base64值(应急方案)

如果没法用jq,可以用文本匹配的方式提取,但要注意JSON格式不能变(比如Value字段的位置、引号格式不能改):

1. 用sed提取Base64

curl -s --request GET http://10.0.10.10:8500/v1/kv/w-key-value | sed -n 's/.*"Value":"\([^"]*\)".*/\1/p'

原理是匹配"Value":"开头,直到下一个"的内容,把中间的部分提取出来。

2. 提取+解码+取第14字段

和jq的流程一样,管道串起来就行:

curl -s --request GET http://10.0.10.10:8500/v1/kv/w-key-value | sed -n 's/.*"Value":"\([^"]*\)".*/\1/p' | base64 -d | awk '{print $14}'

三、替换JSON中的Base64值

如果要把原JSON里的Value换成新的Base64值,还是推荐用jq:

1. 先把新内容编码成Base64

比如你要替换的新内容是{ "Session": "new-session-id" },先转成Base64:

new_content='{ "Session": "new-session-id" }'
new_base64=$(echo -n "$new_content" | base64)

2. 用jq替换并更新到Consul

直接用jq修改JSON的Value字段,再用PUT请求写回Consul:

curl -s --request GET http://10.0.10.10:8500/v1/kv/w-key-value | jq --arg new_val "$new_base64" '.[0].Value = $new_val' | curl -X PUT http://10.0.10.10:8500/v1/kv/w-key-value -d @-

或者更直接的,不用先GET,直接把新的Base64内容PUT进去:

echo -n "$new_content" | base64 | curl -X PUT http://10.0.10.10:8500/v1/kv/w-key-value -d @-

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:25