我有一个类似这样的内容文件:
content.json(对象数组)
[
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]},
]
有一个配置文件,其内容相似但值不同。
config.json(对象值)
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]},
我的目标是将 config.json 文件的内容附加到 content.json 文件,以便新的 content.json 文件将变为:
[
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]},
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]},
]
我的想法是从 content.json 文件中找到},\n]
正则表达式并将其替换为 config.json 文件的内容。由于我远程运行这些命令,我的想法是使用 sed 将其作为单个命令运行。但不知何故,我没有在 sed 中获得任何适当的文档/帮助来实现这一目标。
任何人都可以在这里帮忙吗?
答案1
假设这些文件是有效的 JSON 文件,即该content.json
文件看起来像
[
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]}
]
或者喜欢
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]}
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]}
看起来config.json
像
[
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]}
]
或者喜欢
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]}
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]}
...然后jq
可用于轻松地将两个数组合并到您需要的 JSON 结构中:
$ jq -s flatten content.json config.json
[
{
"interval": 1,
"expired": 3,
"ignored": [
".git",
".p4"
]
},
{
"interval": 2,
"expired": 4,
"ignored": [
".git",
".p4"
]
},
{
"interval": 3,
"expired": 3,
"ignored": [
".git",
".p4"
]
},
{
"interval": 4,
"expired": 4,
"ignored": [
".git",
".p4"
]
}
]
flatten
中的命令合并jq
数组的顶级条目。该数组是由每个文件中的数据组成的数组,作为两个单独的数组条目。
用于jq -c
获得更紧凑的输出:
$ jq -cs flatten content.json config.json
[{"interval":1,"expired":3,"ignored":[".git",".p4"]},{"interval":2,"expired":4,"ignored":[".git",".p4"]},{"interval":3,"expired":3,"ignored":[".git",".p4"]},{"interval":4,"expired":4,"ignored":[".git",".p4"]}]
答案2
我建议你这样做jq
(参见其他答案)。
但是,如果您确实必须使用 sed,并且配置文件没有开始和结束方括号(如图所示),则(使用 GNU sed
):
sed -i -e '$rconfig.json' -e '$a]' -e '$d' content.json