我正在尝试使用bash将对象添加到json文件中。例如下面是我的目标最终结果
{
....,
"publishConfig": {
"registry": "http://myapp.org:4873/"
}
}
所以我在脚本中使用以下bash命令
sed -i '$s/}/,\n"publishConfig":{\n\t"registry":"http://myapp.org:4873/"\n}\n}/' somefile.json
但是我一直收到以下错误
char 48:' m
的未知选项
有人可以帮我解决这个正则表达式。提前谢谢。
答案 0 :(得分:4)
正则表达式中的斜杠未转义。你应该用反斜杠来逃避它们:
sed -i '$s/}/,\n"publishConfig":{\n\t"registry":"http:\/\/myapp.org:4873\/"\n}\n}/' somefile.json
但是我建议选择一个内置JSON支持的工具,比如PHP。或者是一种能够处理JSON的编程语言。
更新
例如,在NodeJS中:
node <<'EOS'
var fs = require("fs");
var filename = 'somefile.json';
var s = fs.readFileSync(filename, {encoding: 'utf-8'});
var o = JSON.parse(s);
o.publishConfig = { registry: "http://myapp.org:4873/" };
fs.writeFileSync(filename, JSON.stringify(o, null, '\t'));
EOS
答案 1 :(得分:0)
以下内容应该有效:
sed -i'$ s /} /,\ n“\ t \ t \ t \ t \ t \ t \ t”/ tpublishConfig“:{\ n \ t”“注册表”:“http://myapp.org:4873/”\ n \ t} \ n \ n} /'somefile.json。
但最好使用像python或jq这样的动作。
此外,您正在寻找的操作类似于合并两个json文件。 Sed可以合并两个,但是如何合并1000个JSON文件。如果你用sed或awk开始这样做,那对你来说太可怕了。但是如果你使用类似Python的东西,你可以通过程序来实现。希望它有所帮助。