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

如何用sed或awk在格式化JSON文件中匹配后插入行?

sed插入行报错的解决方法

问题背景

原始JSON内容:

{
  "id": "a1234567-89ab-cdef-0123-456789abcdef",
  "properties": {
    ...
    "my_id": "c1234567-89ab-cdef-0123-456789abcdef",
    ...
}

需求:匹配包含4个前导空格的my_id行,在其后插入新行 "my_value": "abcd",,期望输出:

{
  "id": "a1234567-89ab-cdef-0123-456789abcdef",
  "properties": {
    ...
    "my_id": "c1234567-89ab-cdef-0123-456789abcdef",
    "my_value": "abcd",
    ...
}

尝试执行命令:

sed '/.*"my_id".*/a "my_value": "abcd",' test.json

出现错误:command a expects \ followed by text

错误原因

  1. 正则匹配太宽泛:.*"my_id".*会匹配所有包含my_id的行,无法精准定位到4个前导空格的目标行
  2. sed语法不符合标准:POSIX规范下,sed的a(追加)命令要求在a后加反斜杠\并换行,才能指定要插入的内容;非GNU版本的sed不支持a后直接跟内容的写法

正确命令写法

方法1:兼容POSIX标准的通用写法(适用于所有sed版本)

sed '/^    ""my_id":.*/a \
    ""my_value": "abcd",' test.json
  • 正则^ ""my_id"::^匹配行首,后面跟4个空格,确保只匹配目标层级的my_id行
  • a命令后加\并换行,符合POSIX sed的语法要求,指定要插入的内容

方法2:GNU sed简化写法(仅Linux等使用GNU sed的环境)

GNU sed允许a命令后直接跟插入内容,无需换行转义:

sed '/^    ""my_id":.*/a    ""my_value": "abcd",' test.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:25:18