使用sed将行添加到.JSON文件的末尾

2exbekwf  于 2023-05-23  发布在  其他
关注(0)|答案(3)|浏览(160)

我有一个. json文件,看起来像这样:

{
    "Direction": "down",
    "Conversion": "Complete",
    "Version": "v1.0.20170724"
}

我想在结尾添加一行,所以我这样做了:

sed -i '$s/}/,\t"Task":"Yes"}/' data.json

它将文件更改为:

{
    "Direction": "down",
    "Conversion": "Complete",
    "Version": "v1.0.20170724"
,   "Task":"Yes"
}

有没有办法让逗号放在倒数第二行的末尾,而不是放在最后一行?

7lrncoxx

7lrncoxx1#

您可以使用以下sed命令实现此目的:

$ cat -vTE file.json 
{$
^I"Direction": "down",$
^I"Conversion": "Complete",$
^I"Version": "v1.0.20170724"$
}$

$ fileLength=$(wc -l file.json | cut -d' ' -f1); sed "$((fileLength-1))s/$/,/; ${fileLength}i  \\\t\"Task\":\"Yes\"" file.json                 
{
        "Direction": "down",
        "Conversion": "Complete",
        "Version": "v1.0.20170724",
        "Task":"Yes"
}

说明:

  1. fileLength=$(wc -l file.json | cut -d' ' -f1);用于确定文件的长度,这里5
  2. $((fileLength-1))s/$/,/;将在第4行末尾添加逗号。
  3. ${fileLength}i \\\t\"Task\":\"Yes\"用于在最后一行之前插入"Task":"Yes"
    您可以将命令的输出重定向到新文件,或者使用sed -i.bak激活内联模式并直接在文件中进行更改。
2skhul33

2skhul332#

这可能对你有用(GNU sed):

sed 'N;/\n}/{s//,&/;P;s/".*,/"Task":"Yes"/};P;D' file

一次读取两行到模式空间中。如果第二行以}开头,则在换行符之前插入,,打印修改后的第一行,将新值替换到第一行并重复。

ppcbkaq5

ppcbkaq53#

如果JSON文件是用缩进格式化的,那么最后搜索唯一的}。然后在此之前插入一行。

sed -i '/^}/i,   "Task":"Yes"' data.json

最后运行一个JSON lint:

python -mjson.tool data.json

相关问题