如何在sed中附加正斜杠(Unix)

时间:2016-05-06 04:06:51

标签: bash unix sed

我正在尝试使用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

的未知选项

有人可以帮我解决这个正则表达式。提前谢谢。

2 个答案:

答案 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

(使用Bash here document

答案 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的东西,你可以通过程序来实现。希望它有所帮助。