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

如何通过shell命令匹配JSON指定规则ID并修改其Status为Disabled

实现方案

处理结构化JSON优先使用专门的JSON处理工具jq,稳定性远高于文本处理工具sed,不会受JSON排版格式影响,同时也提供sed方案适配你的需求。

方案1:jq实现(推荐)

jq是专门面向JSON的命令行处理工具,会严格按照JSON结构操作,不会出现误修改问题,大多数Linux发行版默认预装,无预装可直接通过包管理器安装。

命令:

# 仅输出修改后的内容,不修改原文件
jq '.Rules[] |= if .ID | contains("-FULL-HISTORY-DATA") then .Status = "Disabled" else . end' 你的文件路径.json

# 直接修改原文件(jq 1.6及以上版本支持)
jq -i '.Rules[] |= if .ID | contains("-FULL-HISTORY-DATA") then .Status = "Disabled" else . end' 你的文件路径.json

# 低版本jq修改原文件兼容方案
jq '.Rules[] |= if .ID | contains("-FULL-HISTORY-DATA") then .Status = "Disabled" else . end' 你的文件路径.json > tmp.json && mv tmp.json 你的文件路径.json

方案2:sed实现(仅适用于当前固定排版的JSON)

该方案依赖你当前JSON的固定缩进、行顺序结构,若后续JSON排版变动(比如行顺序调整、缩进变化)可能失效。原理是匹配到包含指定字符串的ID行后,向后查找第一个Status行做替换,不会修改其他规则的Status值。

命令:

# 仅输出修改后的内容,不修改原文件(GNU sed)
sed '/"ID": ".*-FULL-HISTORY-DATA.*",/{:a;n;/Status":/s/"Enabled"/"Disabled"/;ba}' 你的文件路径.json

# 直接修改原文件(GNU sed,比如CentOS、Ubuntu默认sed)
sed -i '/"ID": ".*-FULL-HISTORY-DATA.*",/{:a;n;/Status":/s/"Enabled"/"Disabled"/;ba}' 你的文件路径.json

# 直接修改原文件(macOS自带sed)
sed -i '' '/"ID": ".*-FULL-HISTORY-DATA.*",/{:a;n;/Status":/s/"Enabled"/"Disabled"/;ba}' 你的文件路径.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:04