You need to enable JavaScript to run this app. Shell脚本使用sed替换JSON文件中URL变量失败问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本使用sed替换JSON文件中URL变量失败问题求助

问题原因
  • 你选择+作为sed替换命令的分隔符,MongoDB连接串中包含+字符时会被sed误判为替换命令结束标记,导致替换规则被截断。
  • MongoDB连接串的参数默认用&分隔,sed中&是特殊关键字,会被解析为「替换为匹配到的原行内容」,这是你看到原"uri": "MONGO_URI"重复残留的直接原因。
  • 硬编码行号30的替换逻辑非常脆弱,JSON调整缩进、增减行后会出现替换错位问题。
修复方案

方案1:sed适配特殊字符替换(无需额外工具)

先转义变量中的sed特殊字符,再更换不会冲突的分隔符,同时按字段内容匹配替换行,避免硬编码行号:

# 转义变量中的&、\、/等sed特殊字符
ESCAPED_URI=$(printf '%s\n' "$MONGO_URI" | sed 's/[\/&]/\\&/g')
# 执行替换,使用#作为分隔符
sed -i '/^[[:space:]]*"uri":[[:space:]]*"MONGO_URI"/s#"uri":.*#"uri": "'"$ESCAPED_URI"'",#' temp.json

方案2:使用jq工具替换(推荐,无特殊字符兼容问题)

使用JSON专用处理工具jq可以完全规避sed的特殊字符问题,且精准匹配JSON字段,不受格式、缩进、换行影响:

# Debian/Ubuntu 环境安装jq
apt update && apt install -y jq

# 直接替换requestsDB下的uri字段值
jq --arg mongo_uri "$MONGO_URI" '.requestsDB.uri = $mongo_uri' temp.json > temp.json.tmp && mv temp.json.tmp temp.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 08:27:04