2016-05-06 1 views
1

bashを使ってjsonファイルにオブジェクトを追加しようとしています。以下の例のために私は次のようなエラーにsedにスラッシュを追加する方法(Unix)

のcharを得続けるしかしだから私は、スクリプト

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

で、次のbashコマンドを使用しています

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

を目指しています最終的な結果であります48:未知のオプション 'm

誰かが私を助けてくれますか?この正規表現で。前もって感謝します。

+0

なぜあなたはBashを選択したのだろうか –

答えて

4

正規表現のスラッシュはエスケープされません。

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

しかし、私はPHPなどのビルトインJSONサポートとツールを選択することをお勧めしたい:あなたはバックスラッシュでエスケープする必要があります。 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

スラッシュをエスケープする代わりに、 's%match%replace%'表記で '/'の代わりに '%'などの別の文字を使用することもできます。 –

+0

ああこれは魅力的なように働いていた... – Shadid

+0

@ Shadid:[私の質問に誰かが答えるときにどうすればいいですか?](http://stackoverflow.com/help/someone-answers) – Cyrus

0

次の動作するはず:

SED -i「$秒/} /、\ n "/ tpublishConfig":{\ n \ t "レジストリ": "http://myapp.org:4873/" \ n \ t} \ n \ n}/'somefile.json。

しかし、この種の操作にはpythonやjqなどを使用することをお勧めします。

さらに、探しているアクションは2つのjsonファイルをマージするのと似ています。 Sedは2つをマージできますが、1000のJSONファイルをどのようにマージしますか?あなたがsedまたはawkでそれをやり始めるなら、それはあなたにとってひどいことになります。しかし、Pythonのようなものを使うと、プログラムでそれを行うことができます。それが役に立てば幸い。

関連する問題