如果要匹配多行,如何使用sed更改文本
我需要对文件进行一些更改,但要匹配多行 我尝试了sed的/name here\n.*版本:.*/name here\n版本:new version/g'file.yaml,但不起作用 这是一个和平的代码从文件如果要匹配多行,如何使用sed更改文本,sed,Sed,我需要对文件进行一些更改,但要匹配多行 我尝试了sed的/name here\n.*版本:.*/name here\n版本:new version/g'file.yaml,但不起作用 这是一个和平的代码从文件 name_here: - name: name-here version: 1.3.2.115 - name: other-name version: 1.3.2.115 - name: final-name version: 1.3.2.115 在我使用sed之后,我希望得
name_here:
- name: name-here
version: 1.3.2.115
- name: other-name
version: 1.3.2.115
- name: final-name
version: 1.3.2.115
在我使用sed之后,我希望得到如下结果:
name_here:
- name: name-here
version: new-version
- name: other-name
version: 1.3.2.115
- name: final-name
version: 1.3.2.115
由于数据的结构,您可以使用正则表达式范围来预测数据,而不是尝试在sed中执行多行操作。实际上,您应该使用适当的YAML工具来执行此操作 试一试 这对awk来说是一件容易的工作 如果格式化很重要,则应执行以下操作:
awk 'f && /version/ {sub(/: .*/, ": new version");f=0} /name-here/ {f=1} 1' file
name_here:
- name: name-here
version: new version
- name: other-name
version: 1.3.2.115
- name: final-name
version: 1.3.2.115
使用GNU时:
sed -r '/- name: name-here$/{n; s/(version: ).*/\1new-version/ }' file
输出:
name_here:
- name: name-here
version: new-version
- name: other-name
version: 1.3.2.115
- name: final-name
version: 1.3.2.115
请参阅:man sed这可能适用于GNU sed:
sed '/name-here/{:a;n;/version:/s/:.*/: new-version/;Ta}' file
在此处查找包含名称的行,然后修改包含版本的第一行:
如果只想替换文件中的版本:一次,请使用:
sed '/name-here/{:a;n;/version:/s/:.*/: new-version/;Ta;:b;n;bb}' file
awk更适合这份工作。sed是强制性的吗?
sed '/name-here/{:a;n;/version:/s/:.*/: new-version/;Ta}' file
sed '/name-here/{:a;n;/version:/s/:.*/: new-version/;Ta;:b;n;bb}' file