将匹配的多行字符串之间的字符串替换为sed

时间:2018-08-29 08:43:48

标签: bash sed

我有以下配置文件:

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

我现在想用“ newVersion”之类的东西替换服务器1的版本。

版本始终在名称下方,我想替换版本号(4.3.2.1),但我不知道该编号,因此我必须替换'version:'和'\ n之间的所有内容'。

我知道我想更改server1的版本。

我尝试了以下操作:

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

我知道sed如果没有N运算符就无法“正常”读取多行,但是它仍然对我不起作用,有人可以在这里帮助我吗?

2 个答案:

答案 0 :(得分:1)

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"

答案 1 :(得分:0)

此sed在name: server1$version:之间用version: .*替换了version: newVersion

sed '/name: server1$/,/version: /s/version: .*/version: newVersion/'