2016-05-13 16 views
0

Ich brauche Hilfe eines RegexMuster schreiben mit sed zu Suchen und Ersetzen, Suchen folgende Muster vonRegexMuster Such

String:

string   = "text" 

im Grunde eine Zeichenfolge mit unbestimmtem weißen Leerzeichen gefolgt durch einen Text in "". Ich muss Text mit sed ersetzen.

+0

Und was hast du versucht? –

+0

Was ist das erwartete Ergebnis? –

+0

sed -i "s # string \ (. * \) =. * # String \ 1 = $ replace_val # g" – Dexter

Antwort

0

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" 
+0

ich muss auch nach der Zeichenfolge suchen. Muster ist: string = "Text" – Dexter

+0

@Dexter ja Die Antwort war aktualisiert worden, als ich das erfuhr. Aktualisieren Sie und sagen Sie es mir. –

+0

einige Probleme mit aktualisierten Regex. früher ohne String funktioniert, aber nicht mit String – Dexter