Заменить строку между соответствующей многострочной строкой на sed - PullRequest
0 голосов
/ 29 августа 2018

У меня есть следующий файл конфигурации:

dependencies:
- name: server2
  version: 1.0.0.0
  repository: "repository2"
- name: server1
  version: 4.3.2.1
  repository: "repository2"

Теперь я хочу заменить версию сервера 1 чем-то вроде 'newVersion'.

Версия всегда находится под именем, я хочу заменить номер версии (4.3.2.1), но я не знаю этот номер, поэтому мне нужно заменить все, что находится между 'version:' и '\ n ».

Я знаю, что хочу изменить версию server1.

Я попробовал следующее:

sed ':a;N;$!ba;s/server1\n\s\sversion:/newVersion/}' file.txt

Я знаю, что sed не может "нормально" читать несколько строк без оператора N, но у меня все равно это не работает, кто-нибудь может мне здесь помочь?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Этот sed заменяет name: server1$ и version: на этот: version: .* на version: newVersion.

sed '/name: server1$/,/version: /s/version: .*/version: newVersion/'
0 голосов
/ 29 августа 2018

Это sed должно сделать:

$ sed '/name: server1$/{n;s/version: .*/version: 5.4.3.2/}' data
dependencies:
- name: server2
  version: 1.0.0.0
  repository: "repository2"
- name: server1
  version: 5.4.3.2
  repository: "repository2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...