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

MacOS下如何用sed替换JSON特定Key值中的连字符为下划线

解决MacOS下特定JSON Key数组内连字符替换为下划线的问题

方法一:使用jq(推荐,适合大型/复杂JSON)

jq是专门处理JSON的工具,MacOS可通过brew install jq安装。它能精准识别JSON结构,避免正则处理带来的格式兼容问题。

执行以下命令完成替换:

jq '."key" |= map(gsub("-"; "_"))' input.json > output.json

命令说明:

  • ."key":定位到名为key的目标字段
  • |= map(...):对该字段的数组值逐个元素处理
  • gsub("-"; "_"):将每个数组元素中的所有连字符-替换为下划线_
  • 其他字段的内容完全保持不变

示例效果:

输入JSON:

{
  "key": ["test-value-1", "value-2"],
  "anotherKey": "unrelated-value"
}

运行命令后输出:

{
  "key": ["test_value_1", "value_2"],
  "anotherKey": "unrelated-value"
}

方法二:使用MacOS自带的BSD sed

如果坚持用sed处理,需编写循环替换逻辑,确保仅修改"key": [和]范围内的连字符:

单行JSON处理命令:

sed -E ':a; s/("key": \[[^]]*)-([^]]*\])/\1_\2/; ta' input.json

命令说明:

  • :a:定义循环标签a
  • s/("key": \[[^]]*)-([^]]*\])/\1_\2/:匹配"key": [后到]前的任意-,替换为_
  • ta:若替换成功,回到标签a继续循环,直到该范围内无-可替换

示例效果:

$ echo '{"key": ["test-value-1", "value-2"], "anotherKey": "unrelated-value"}' | sed -E ':a; s/("key": \[[^]]*)-([^]]*\])/\1_\2/; ta'
{"key": ["test_value_1", "value_2"], "anotherKey": "unrelated-value"}

注意事项:

sed依赖文本格式,若JSON为多行结构(比如数组元素换行),sed可能无法正确匹配,这种场景下优先使用jq。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:14:53