Ein Weg:Musterdatei
$ cat file
Cygwin
Unix
Linux
Solaris
AIX
Mit sed die nächste Zeile nach dem Muster 'Unix' durch 'hi' ersetzen:
$ sed '/Unix/{n;s/.*/hi/}' file
Cygwin
Unix
hi
Solaris
AIX
Zu Ihrer konkreten Frage:
$ sed '/<key>ConnectionString<\/key>/{n;s/<string>.*<\/string>/<string>NEW STRING<\/string>/}' your_file
<key>ConnectionString</key>
<string>NEW STRING</string>
Das könnte für Sie funktionieren (GNU sed):
sed '/<key>ConnectionString<\/key>/!b;n;c<string>changed_value</string>' file
!b
negiert die vorherige Adresse (regexp) und bricht jede Verarbeitung ab, wodurch die sed-Befehle beendet werden, n
druckt die aktuelle Zeile und liest dann die nächste in den Musterbereich ein, c
ändert die aktuelle Zeile in die Zeichenfolge nach dem Befehl.
Es klappt. Außerdem möchte ich das erwähnen, wenn Sie schreiben,
sed '/<key>ConnectionString<\/key>/!b;n;n;c<string>changed_value</string>' file
Beachten Sie die zwei n, es ersetzt nach zwei Zeilen und so weiter.