如何在json中的每行前面插入一个包含内容的新行?

How to insert a new line with content in front of each line in json?

我认为 sed 应该是执行此操作的命令,但我还没有找到合适的命令。

我的 json 文件如下所示:

{"LAST_MODIFIED_BY":"david","LAST_MODIFIED_DATE":"2018-06-26 12:02:03.0","CLASS_NAME":"/SC/Trade/HTS_CA/1234abcd","DECISION":"AGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"something"}
{"LAST_MODIFIED_BY":"sarah","LAST_MODIFIED_DATE":"2018-08-26 12:02:03.0","CLASS_NAME":"/SC/Import/HTS_US/9876abcd","DECISION":"DISAGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"nicename"}
... more rows to follow

我想要实现的是 json 包含以下内容的文档:

{"index":{}}
{"LAST_MODIFIED_BY":"david","LAST_MODIFIED_DATE":"2018-06-26 12:02:03.0","CLASS_NAME":"/SC/Trade/HTS_CA/1234abcd","DECISION":"AGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"something"}
{"index":{}}
{"LAST_MODIFIED_BY":"sarah","LAST_MODIFIED_DATE":"2018-08-26 12:02:03.0","CLASS_NAME":"/SC/Import/HTS_US/9876abcd","DECISION":"DISAGREE","TASK_TYPE_ID":"abcd1234-832b-43b6-afa6-361253ffe1d5","NAME":"nicename"}
... more rows to follow

这样我就可以运行批量加载API Elasticsearch。

最接近的是这个:,但它把我的 json 文件分成了损坏的项目,而不是我想要的格式。

如有任何想法,我将不胜感激!

使用sed:

     sed 's/^/{"index":{}}\
/'

这里的技巧是\

或者,如果您的 shell 支持它:

sed $'s/^/{"index":{}}\n/'

或(根据@sundeep 的建议):

sed $'i\\n{"index":{}}\n'

使用 jq:

jq -nc 'inputs | {"index":{}}, .'

这里,关键是-c生成JSONLines的选项。

使用 awk:

awk '{print "{\"index\":{}}"; print;}'

等等

这可能适合您 (GNU sed):

sed 'i{"index":{}}' file

在每行前插入 {"index":{}}