linux – sed用多行查找和替换两个标签

我想找到并替换一个模式

text="
hold1
hold2 
<file option1='one'>
some text
some text 
...
... more data
</file>
this1
that1
"

pattern="<file.*</file>"

replacewith="<sometext>
value1
</sometext>"

output text="
hold1
hold2
<sometext> 
value1
</sometext>
this1
that1
"

附: Stackoverflow上的这些问题没有帮助.
sed : printing lines between two words only when one of the line matches a third word or any pattern

Regex with sed,search across multiple lines

解决方法

使用sed你可以尝试类似的东西:

sed -e ':a;N;$!ba' -e 's#<file.*</file>#<sometext>\nvalue1\n</sometext>#' file

我的sed有点生疏,但我们在这里做的是使用:a; N; $!ba我们在模式空间中有效地创建了一条长行,以便我们可以应用第二个表达式替换它.

这可能需要GNU sed

测试:

$cat file
hold1
hold2
<file option1='one'>
some text
some text
more data
</file>
this1
that1
$sed -e ':a;N;$!ba' -e 's#<file.*</file>#<sometext>\nvalue1\n</sometext>#' file
hold1
hold2
<sometext>
value1
</sometext>
this1
that1

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...