2016-05-06 29 views
1

我正在嘗試使用bash將對象添加到json文件。例如下面是最終的結果,我瞄準了如何在sed中添加正斜槓(Unix)

{ 
    ...., 
    "publishConfig": { 
    "registry": "http://myapp.org:4873/" 
    } 
} 

所以我在腳本中使用以下bash命令

sed -i '$s/}/,\n"publishConfig":{\n\t"registry":"http://myapp.org:4873/"\n}\n}/' somefile.json 

但我不斷收到以下錯誤

字符48:未知選項'm

有人能幫我嗎與這個正則表達式。提前致謝。

+0

我想知道爲什麼選擇Bash –

回答

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

轉義斜槓的替代方法是在'%match%replace%'表示法中使用另一個字符,例如'%'代替'/'。 –

+0

啊,這已經像一個魅力... – Shadid

+0

@Shadid:請看看:[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers) – Cyrus

0

下面應該工作:

的sed -i「$ S /} /,\ n「\ tpublishConfig」:{\ n \ t「registry」:「http://myapp.org:4873/」\ n \ t} \ n \ n} /'somefile.json。

但是更好的使用類似python或jq這樣的動作。

此外,您正在尋找的動作與合併兩個json文件類似。 Sed可以合併兩個,但你將如何合併1000個JSON文件。如果你通過sed或awk開始這樣做,那對你來說會很糟糕。但是如果你使用Python之類的東西,你可以通過程序來完成。希望能幫助到你。