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

如何用jq、sed等命令移除menu.json中client2相关的collect.whitelist条目?

移除menu.json中collect.whitelist字段内的client2相关条目

问题背景

需要清理menu.json文件里collect.whitelist字段中所有以client2_creat.开头的条目,之前尝试的两种命令均未生效:

错误的jq命令:

jq '.[] | select(.collect.whitelist|test("^client2."))' menu.json

错误的sed命令:

sed -e 's/^client2//g' menu.json

正确解决方案

方法1:使用jq(推荐,安全处理JSON结构)

jq是处理JSON的专用工具,不会破坏JSON格式,命令如下:

jq '.["collect.whitelist"] = (.["collect.whitelist"] | split(",") | map(select(test("^client2_creat.") | not)) | join(","))' menu.json > updated_menu.json

命令逻辑:

  1. 定位到collect.whitelist字段
  2. 将逗号分隔的字符串拆转为数组
  3. 过滤掉所有以client2_creat.开头的数组元素
  4. 将过滤后的数组重新拼接为逗号分隔的字符串
  5. 将结果输出到新文件updated_menu.json(避免直接覆盖原文件)

方法2:使用sed(文本处理方式,需注意JSON格式)

如果用sed处理,需要匹配整个client2相关的条目并清理残留的逗号,命令如下:

sed -e 's/\(client2_creat\.[^,]*\),\?//g' -e 's/,,/,/g' -e 's/^,//' -e 's/,$//' menu.json > updated_menu.json

命令逻辑:

  1. 匹配并删除所有client2_creat.开头到下一个逗号的条目(含可选逗号)
  2. 清除替换后可能出现的连续逗号
  3. 清除字符串开头或结尾残留的逗号

原命令失败原因

  • 原jq命令:.[]会遍历顶层所有键值对,而非定位到目标字段;test("^client2.")是匹配行首的client2,而目标条目是在字符串中间,逻辑完全错误。
  • 原sed命令:s/^client2//g仅替换行首的client2,无法匹配字符串中间的条目,且仅删除前缀而非整个条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:22:52