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

时间:2018-02-10 17:53:35

标签: json sed

我有一个看起来像这样的.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"
}

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

2 个答案:

答案 0 :(得分:1)

您可以使用以下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"
  4. 您可以将命令的输出重定向到新文件,或使用sed -i.bak激活内联模式并直接在文件中进行更改。

答案 1 :(得分:1)

这可能适合你(GNU sed):

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

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