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

如何用sed精准替换JSON文件第5行指定位置的密码字符串?

解决方案:用sed精准替换JSON中password字段的内容

针对你的需求,这里有两种可靠的sed命令方案,既能精准替换password引号内的内容,又不会出现截断或重复执行变长的问题:

方案1:按固定位置替换(适合你提到的长度固定场景)

如果确定password字段在第5行,且引号内的内容从第18位到第154位(共137个字符),可以用这个命令:

sed -i '5s/^\(.\{17\}\).\{137\}/\1new-string/' file.json

命令解释:

  • 5:仅对第5行进行操作
  • ^\(.\{17\}\):匹配行首的前17个字符(也就是"password": "这部分),并用\1捕获保存
  • .\{137\}:匹配接下来的137个字符(即原来的password哈希值)
  • \1new-string:将捕获的前17个字符与你的新字符串拼接,替换掉原来的匹配部分

这样执行多少次都只会替换固定长度的内容,不会破坏末尾的",结构。

方案2:按字段匹配替换(更通用,不受行号/长度限制)

如果JSON的行号可能变化,或者password长度有变动,推荐用这种基于字段模式的匹配方式,更鲁棒:

sed -i 's/"password": "[^"]*"/"password": "new-string"/' file.json

命令解释:

  • "password": "[^"]*":匹配"password": "开头,后面跟着任意非引号字符([^"]*),直到结尾的引号,这正好覆盖了整个password字段的内容
  • 替换部分"password": "new-string"直接替换成带新密码的字段格式

这种方式不需要关心行号或原密码长度,只要字段格式正确就能精准替换。

为什么你的原命令会出问题?

你之前用的sed -i 5s/./new-string/18 file.json存在两个关键问题:

  1. 语法逻辑错误:/./是匹配单个字符,/18是指定替换第18次匹配的单个字符,这会把第18个字符替换成new-string(多字符),导致行内容被拉长
  2. 没有限定替换范围:既没有指定要替换的字符数量,也没有保留末尾的",,所以会破坏原有JSON结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:51:36