Подтвердить что ты не робот

Найти соответствующий текст и заменить следующую строку

Я пытаюсь найти строку в файле и заменить следующую строку на определенное значение. Я попробовал sed, но, похоже, это не нравится \n. Как еще это можно сделать?

Файл выглядит следующим образом:

<key>ConnectionString</key>
<string>anything_could_be_here</string>

И я бы хотел изменить его на

<key>ConnectionString</key>
<string>changed_value</string>

Вот что я пробовал:

sed -i '' "s/<key>ConnectionString<\/key>\n<string><\/string>/<key>ConnectionString<\/key>\n<string>replaced_text<\/string>/g" /path/to/file
4b9b3361

Ответ 1

Это может сработать для вас (GNU sed):

sed '/<key>ConnectionString<\/key>/!b;n;c<string>changed_value</string>' file

Ответ 2

Один из способов: Пример файла

$ cat file
Cygwin
Unix
Linux
Solaris
AIX

Используя sed, заменив следующую строку после шаблона "Unix" на "hi":

$ sed '/Unix/{n;s/.*/hi/}' file
Cygwin
Unix
hi
Solaris
AIX

По вашему конкретному вопросу:

$ sed '/<key>ConnectionString<\/key>/{n;s/<string>.*<\/string>/<string>NEW STRING<\/string>/}' your_file
<key>ConnectionString</key>
<string>NEW STRING</string>

Ответ 3

Это работает. Кроме того, интересно отметить, что если вы пишете,

sed '/<key>ConnectionString<\/key>/!b;n;n;c<string>changed_value</string>' file

Обратите внимание на два n, он заменяет две строки и т.д.