【发布时间】: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 是从“值”开始关闭}, 的数字。
【问题讨论】:
-
(1) 不要使用面向行的工具来解析 JSON,使用像 jq 这样的语法感知工具 (2) 见 editing help 和 minimal reproducible example
标签: shell sed replace char position