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

时间:2017-09-06 19:15:07

标签: json linux string cat

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

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

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

3 个答案:

答案 0 :(得分:1)

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

只要文件本身是有效的json

就可以工作

答案 1 :(得分:1)

你想要最终的结构并不完全清楚,但让我试着帮助。

我假设您有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)"']'

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

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

答案 2 :(得分:-1)

{ cat file1.json ; echo ','; cat file2.json; }