Ответ 1
Это может сработать для вас (GNU sed):
sed '/<key>ConnectionString<\/key>/!b;n;c<string>changed_value</string>' file
Я пытаюсь найти строку в файле и заменить следующую строку на определенное значение. Я попробовал 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
Это может сработать для вас (GNU sed):
sed '/<key>ConnectionString<\/key>/!b;n;c<string>changed_value</string>' file
Один из способов: Пример файла
$ 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>
Это работает. Кроме того, интересно отметить, что если вы пишете,
sed '/<key>ConnectionString<\/key>/!b;n;n;c<string>changed_value</string>' file
Обратите внимание на два n, он заменяет две строки и т.д.