【问题标题】:Replace first instance of char in JSON file using shell script使用 shell 脚本替换 JSON 文件中 char 的第一个实例
【发布时间】:2020-01-03 07:04:11
【问题描述】:

仅从已知位置替换 JSON 文件中第一次出现的 char 并继续直到下一个块。

我有需要更改的 JSON 文件。 具有嵌套子部分的部分有多个实例。每一个都以

开头
"values": {
    "Firm":[
        "AAA"
    ],
    "Date":[
        "08/19"
    ],
    "Approval Status":[
        "Completed"
    ]
},
other key1: value pair
other key2: value pair
other key3: value pair

子项的数量因“值”部分而异。我需要在“值”块内附加方括号。 第一个方括号我很容易用 sed 附加。 我还可以找到完成圆括号的位置。 如何将关闭 }, 替换为 }], 但仅使用“值”部分? 所以给定部分的最终输出应该是:

"values":[ {
    "Firm":[
        "AAA"
    ],
    "Date":[
        "08/19"
    ],
    "Approval Status":[
        "Completed"
    ]
} ],
other key1: value pair
other key2: value pair
other key3: value pair

注意第一个[和最后一个],。这两个应该添加到 JSON 中的每个“值”:部分。

要附加第一个 '[' 括号,我使用这个简单的 sed 命令,它将“values:”替换为“values:[”。

sed -i -e 's/\"values\":/\"values\":[/g' file.json

我可以在 }, 块的末尾找到一个位置 ${pos} 的两个字符,其中右方括号应该去,但是我如何强制 sed 或 awk 仅在该位置替换? 我尝试在每一行替换。 我试过了:

sed -i -e 's/\(.\{195\}\)./\1],/' file.json

此命令将], 添加到每一行(如果行中有 195 个字符。如果行较短则跳过)。 195 是从“值”开始关闭}, 的数字。

【问题讨论】:

标签: shell sed replace char position


【解决方案1】:

您应该对 JSON 文件使用正确的工具,但如果无法做到这一点,请尝试以下操作:

sed -i 's/\("values":\)/\1[/g; s/},/] },/g' file.json
"values":[ {
    "Firm":[
        "AAA"
    ],
    "Date":[
        "08/19"
    ],
    "Approval Status":[
        "Completed"
    ]
] },
other key1: value pair
other key2: value pair
other key3: value pair

【讨论】:

  • 谢谢 Jotne,您会推荐什么合适的 JSON 工具来处理字符串操作?
  • @user11997143 我不是JSON人,但看到其他人推荐这个stedolan.github.io/jq
猜你喜欢
  • 2016-11-04
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2013-03-28
相关资源
最近更新 更多