我有一个看起来像这样的.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"
}
有没有办法让逗号位于倒数第二行的末尾,而不是最后一行?
答案 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"
}
说明:
fileLength=$(wc -l file.json | cut -d' ' -f1);
用于确定此处5
的文件长度。$((fileLength-1))s/$/,/;
将在第4行末尾添加逗号。${fileLength}i \\\t\"Task\":\"Yes\"
用于在最后一行之前插入"Task":"Yes"
!您可以将命令的输出重定向到新文件,或使用sed -i.bak
激活内联模式并直接在文件中进行更改。
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed 'N;/\n}/{s//,&/;P;s/".*,/"Task":"Yes"/};P;D' file
一次读取两行到模式空间。如果第二行以}
开头,请在换行符前插入,
,打印修改后的第一行,将新值替换为第一行并重复。