2016-11-03 3 views
0

ich eine Textdatei mit dem Namen package.json habe, die die folgende snippit enthält:bash sed Text mit regex ersetzen

"single-instance":true, 
    "user-agent": "somename", 
    "PORT": 2000, 

Ich brauche ‚somename‘ mit einem anderen Wert zu ersetzen (in diesem Fall xxx) und ‚somename 'ist nicht festgelegt, es könnte alles sein.

Also habe ich versucht, mit der folgenden Regex, aber es aktualisiert die Datei nicht.

Ich habe den Regex-Ausdruck auf Regex101 getestet und es scheint gültig zu sein, also denke ich, es muss etwas mit der sed-Syntax zu tun haben ??

sed -i 's/"user-agent": "(.*)"/xxx/' package.json 

Irgendwelche Vorschläge, wo ich falsch liege?

+0

zur Kenntnis, dass sed standardmäßig BRE verwendet, wo '()' nicht Meta-Zeichen ... Sie '\ (\)' oder aktivieren verwenden müssen ERE mit seds "-E" oder "-r" Option .. siehe http://www.regular-expressions.info/posix.html für BRE/ERE – Sundeep

Antwort

0

Sie müssen die angepassten Schlüssel und verwenden Rückverweis in Ersatz erfassen:

sed -i.bak -E 's/("user-agent":)"[^"]*"/\1"xxx"/' file 

cat file 

"single-instance":true, 
"user-agent": "xxx", 
"PORT": 2000, 

Beachten ( und ) um "user-agent": für den Wert in der Gruppe # 1 und \1 Ersatz verwenden zu erfassen.

+1

Vielen Dank, ich habe etwas gelernt :-) – crankshaft

+0

Gut zu wissen es hat geklappt, [Sie können die Antwort als akzeptiert markieren, indem Sie auf ** Häkchen ** oben links in dieser Antwort klicken] (http://meta.stackexchange.com/a/5235/160242) – anubhava

0

könnten Sie versuchen, diese nach der Sicherung package.json

sed -i -re 's/("user-agent":).*$/\1 "xxx"/' package.json