加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 00:53:44 所属栏目:Linux 来源:网络整理
导读:我想找到并替换一个模式 text="hold1hold2 file option1='one'some textsome text ...... more data/filethis1that1"pattern="file.*/file"replacewith="sometextvalue1/sometext"output text="hold1hold2sometext value1/sometextthis1that1" 附: Stackove
我想找到并替换一个模式

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>nvalue1n</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>nvalue1n</sometext>#' file
hold1
hold2
<sometext>
value1
</sometext>
this1
that1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读