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

如何通过Python远程修改JSON指定字段?sed命令失效求助

问题分析与解决方案

问题原因

  1. 贪婪匹配导致文件不完整:你原sed命令中的.*是贪婪匹配规则,会从"accessRights":之后一直匹配到文本末尾,把"name": "admin"等后续内容全部替换掉,直接造成文件截断。
  2. 转义错误与正则逻辑缺陷:原命令错误使用了HTML实体转义\",同时正则未精准限定字段值的匹配范围,还可能因sed版本或隐式参数导致值被转为小写。

正确解决方案

方案一:使用jq(推荐,结构化JSON处理工具)

jq是专门用于JSON操作的工具,能无视JSON的格式变化(空格、换行)精准定位修改字段,是处理结构化JSON数据的标准方式。

修改后的Python代码:

def test_tc():
    newUsrCfg = "F7FFF"
    # 用jq更新accessRights字段,输出到临时文件后替换原文件(避免直接修改出错)
    cmd = f'jq \'.users.accessRights = "{newUsrCfg}"\' /etc/hgp/runtime/user/user1.json > temp.json && mv temp.json /etc/hgp/runtime/user/user1.json'
    subprocess.call(["bash", pathToSshCommand, cmd])

如果远程设备未安装jq,可通过包管理器安装(如apt install jq或yum install jq)。

方案二:修正sed命令(仅当无法使用jq时)

通过精准正则避免贪婪匹配,同时修正转义逻辑:

def test_tc():
    newUsrCfg = "F7FFF"
    # 用[^"]*匹配字段值(仅匹配到下一个双引号),避免过度匹配
    cmd = f'sed -i \'s/"accessRights":"[^"]*"/"accessRights":"{newUsrCfg}"/g\' /etc/hgp/runtime/user/user1.json'
    subprocess.call(["bash", pathToSshCommand, cmd])

注意:如果远程是BSD系统(如macOS),sed的-i选项需要指定备份后缀,比如sed -i.bak 's/.../.../' file,执行后可手动删除生成的.bak备份文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:20:02