2016-05-06 3 views
1

Я пытаюсь добавить объект в json-файл, используя bash. например ниже конечный результат я стремлюсьКак добавить косую черту в sed (Unix)

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

Так я использую следующую команду Баш в скрипте

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

Однако я получаю следующую ошибку

полукокса 48: неизвестный вариант до 'м

Может кто-то, пожалуйста, помогите мне с этим регулярным выражением. Заранее спасибо.

+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

Альтернативой экранированию косой черты является использование другого символа, такого как '%', вместо символа '/' в обозначении '%%% replace% '. –

+0

ahh это сработало как шарм ... – Shadid

+0

@Shadid: Пожалуйста, взгляните на: [Что делать, если кто-то отвечает на мой вопрос?] (Http://stackoverflow.com/help/someone-answers) – Cyrus

0

Следующая должно работать:

СЭД -i «$ ев /} /, \ n "\ tpublishConfig": {\ n \ t "registry": "http://myapp.org:4873/" \ n \ t} \ n \ n}/'somefile.json.

Но лучше использовать что-то вроде python или jq для такого рода действий.

Кроме того, действие, которое вы ищете, похоже на слияние двух json-файлов. Sed может объединить два, но как вы объедините 1000 файлов JSON. Если вы начнете делать это с помощью sed или awk, это будет ужасно для вас. Но если вы используете что-то вроде Python, вы можете сделать это через программу. Надеюсь, поможет.

Смежные вопросы