sed查找和replace两个标签之间用多行

我想在哪里find并replace一个模式

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 " 

PS Stackoverflow的这些问题没有帮助。 sed:只有当其中一行匹配第三个字或任何模式时,才在两个字之间打印行

与sed正则expression式,跨越多行search

使用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