linux cat 将两个文件作为一个文件回显

linux cat echo two files as one

我想从命令行为两个 .json 文件执行此操作:

#echo '[' . (cat file1.json) . ',' . (cat file2.json) . ']'

但这显然是伪代码。我该怎么做?

{ cat file1.json ; echo ','; cat file2.json; }
echo "[ $(cat file1.json) , $(cat file2.json) ]"

只要文件本身有效就可以工作json

您不太清楚您想要的最终结构是什么,但让我尽力提供帮助。

我假设你有 2 个文件只包含有效的 json 并且从你的问题中猜测你想将这两个文件打印为数组的成员。

为了举例,我假设 file1.json 看起来像这样:

{"name":"object1"}

并且 file2.json 像这样:

{"name":"object2"}

这可以用 jq 来完成,这是一个非常有用的工具,用于解析 JSON 流,使用 -s/--slurp 选项,它将整个输入流读入一个缓冲区而不是处理每个对象分开。它具有将对象组合成数组的额外好处。我们可以使用默认的 'passthrough' 过滤器 '.' 并将两个文件通过管道传输到一个数组中。

cat file1.json file2.json | jq --slurp '.'

将输出:

[
  {
    "name": "object1"
  },
  {
    "name": "object2"
  }
]

Demo

如果你想在一个对象中使用该数组,你可以使用过滤器 {"array":.}

Demo

我强烈建议 jq 用于您计划从 shell 进行的任何 JSON 交互,但如果您不能,并且必须使用内置函数,您可以像这样拼凑一些东西:

echo '['"$(cat file1.json)"','"$(cat file2.json)"']'

此解决方案使用 subshells $() 来执行其中的命令并将其输出包含在 echo 中。

我再次重申,使用jq。它更干净,更坚固,并确保输入和输出有效JSON。