如何使用sed替换找到的第二个模式?
<default>...</default>
<default>...</default>
<default>...</default>
<setting id="lookandfeel.font" type="string" parent="lookandfeel.skin" label="13303" help="36107">
<level>1</level>
<default>Default</default>
</setting>
<default>...</default>
<default>...</default>
<default>...</default>
first pattern = lookandfeel.font
第二种模式=默认
然后将“Default”替换为“Arial”
答案 0 :(得分:2)
使用GNU sed:
sed '/<setting id="lookandfeel.font"/,/<\/setting>/{s|<default>Default</default>|<default>Arial</default>|}' file
如果您想“编辑”,请添加选项-i
。
答案 1 :(得分:0)
sed用于单个行上的简单替换,即全部。对于任何更有趣的东西,你应该使用awk的清晰度,简洁性,稳健性,可移植性,可维护性以及几乎所有其他理想的软件质量:
$ awk '/lookandfeel.font/{f=1} f&&sub(/Default/,"Arial"){f=0} 1' file
<default>...</default>
<default>...</default>
<default>...</default>
<setting id="lookandfeel.font" type="string" parent="lookandfeel.skin" label="13303" help="36107">
<level>1</level>
<default>Arial</default>
</setting>
<default>...</default>
<default>...</default>
<default>...</default>
答案 2 :(得分:-1)
在Perl
s/(lookandfeel\.skin[\S\s]*)Default/$1Arial/gm
请参阅:DEMO
根据this question和this question告诉sed
难以处理多行模式,我建议您使用perl
代替sed
注意如果您想要更严格的正则表达式,请在您的问题中添加更多信息。