2017-12-11 9 views
2

Ich benutze sed, um den Wert eines Schlüssels zu ersetzen, aber sed scheint nicht die Regex richtig zu entsprechen. Die JSON Ich habe ähnelt dies,Sed passt nicht zu einem Regex-Muster, es sollte passen

... 
    "env": { 
     "emailBxUrl": "placeholder" 
    }, 
... 

und der sed Befehl, den ich habe, ist dies,

sed -i "s/^(\ |\t)+\"emailBxUrl\"\:.*$/test/gm file1.json 

Nach dem Ausführen des Befehls die Datei nicht ändern. Ich habe die Regex bei regexr, und es fand die „emailBxUrl ...“ Linie ganz gut, wie unten

enter image description here

So gezeigt, was ich für den sed Befehl fehle nicht wie vorgesehen funktionieren?

+2

Online-Sites werden nicht für sed arbeiten weil sed nur BRE/ERE-Flavor von Regex unterstützt ... siehe https://unix.stackexchange.com/questions/119905/why-does-my-regular-expression-work-in-x-but-not-in- y ... das könnte für GNU sed 'sed' s/^ [\ t] \ + "emailBxUrl" funktionieren:. */test/''aber du solltest wirklich regex an erster Stelle für json vermeiden. benutze json parser like jq oder python mit json-modul, etc siehe auch http://mywiki.wooledge.org/Quotes – Sundeep

+1

Sie müssen -E s sed command –

+0

post den erweiterten json hinzufügen Inhalt – RomanPerekhrest

Antwort

1

Wie die Kommentare vorgeschlagen, ich jq verwenden entschieden, aber die Frage, falls jemand wirklich zu beantworten will sed verwenden, arbeitete glenn jackman Vorschlag für mich

sed -ri 's/^[[:blank:]]+"emailBxUrl":.*$/test/gm' file1.json 
Verwandte Themen