微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐