geben diesem einen Versuch:
's/^\(string *=\).*$/\1'"$replace_val"/
()
\(\)
werden müssen entkam in Ersatzteil verwiesen werden.
^
bedeutet Start der Linie.
\(string *=\)
bedeutet eine Gruppe \(... \)
von Zeichen aus string
Wort und gefolgt von *
die 0 oder viele
(Leerzeichen) bedeutet. Die Sequenz von char muss mit =
enden. Dies ist die erste Gruppe, die in der Regex gefunden wurde, so dass sie im Ersatzteil mit \1
referenziert werden kann.
.*$
bedeutet eine beliebige Folge von 0 oder vielen Zeichen bis $
; das Ende der Zeile.
Wenn Sie die doppelten Anführungszeichen halten:
's/^\(string *=\).*$/\1'\""$replace_val"\"/
Test von ersten Regex ohne doppelte Anführungszeichen:
$ cat properties.txt
# property file
name = "smith"
string = "text"
$ replace_val=stackoverflow
$ cp properties.txt properties2.txt
$ sed -i 's/^\(string *=\).*$/\1'"$replace_val"/ properties.txt
$ cat properties.txt
# property file
name = "smith"
string =stackoverflow
Zweiter Test mit doppelten Anführungszeichen:
$ sed -i 's/^\(string *=\).*$/\1'\""$replace_val"\"/ properties2.txt
$ cat properties2.txt
# property file
name = "smith"
string ="stackoverflow"
Und was hast du versucht? –
Was ist das erwartete Ergebnis? –
sed -i "s # string \ (. * \) =. * # String \ 1 = $ replace_val # g" – Dexter