2016-05-06 7 views
1

Ich versuche, ein Objekt zu einer JSON-Datei mit bash hinzufügen. zum Beispiel unten ist das Endergebnis ich fürWie Schrägstrich in sed (Unix) anhängen

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

Ziel bin so bin ich mit dem folgenden Bash-Befehl in einem Skript

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

jedoch halten wir folgende Fehlermeldung bekommen

char 48: unbekannte option zu 'm

kann mir bitte jemand helfen mit dieser Regex. Danke im Voraus.

+0

Ich frage mich, warum haben Sie Bash gewählt –

Antwort

4

Die Schrägstriche im regulären Ausdruck sind nicht gecodiert. Sie sollten sie mit Backslash:

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

Aber ich würde empfehlen, ein Werkzeug mit einem eingebauten in JSON-Unterstützung, wie PHP zu wählen. Oder eine Programmiersprache, die JSON verarbeiten kann.

aktualisieren

Zum Beispiel in 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 

(verwendet Bash here document)

+1

Eine Alternative zu den Schrägstrichen ist die Verwendung eines anderen Zeichens, wie '%', anstelle der '/' in der '% -Match% replace%' -Notation. –

+0

ahh das hat wie ein Zauber funktioniert ... – Shadid

+0

@Shadid: Bitte sehen Sie: [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers) – Cyrus

0

Die folgenden sollte funktionieren:

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

Aber besser verwenden Sie etwas wie Python oder jq für diese Art von Aktionen.

Darüber hinaus ähnelt die Aktion, die Sie suchen, dem Zusammenführen von zwei JSON-Dateien. Sed kann zwei zusammenführen, aber wie werden Sie 1000 JSON-Dateien zusammenführen? Wenn du das mit sed oder awk machst, wird es für dich schrecklich sein. Aber wenn Sie etwas wie Python verwenden, können Sie dies über das Programm tun. Ich hoffe es hilft.