我正在尝试写一个sed
用另一个文件的内容替换两个标记之间的文本的脚本。
假设我有以下带有标记的文件<!-- Start -->
and <!-- End -->
:
# index.html
...
<!-- Start -->
<p>Old content</p>
<!-- End -->
...
我想用该文件的内容替换随附的文本:
# snippet.html
<p>New content</p>
我试过这个sed
script:
$ cat snippet.html | sed -i -e '/<\!-- Start -->/,/<\!-- End -->/ { r /dev/stdin' -e';d};' index.html
它替换了内容和标记,但我需要保持<!-- Start -->
and <!-- End -->
markers这样我以后就可以再次更换内容。
我应该对sed
script?
提前致谢!
您需要对代码执行的操作就是添加//!
之前d
:
cat snippet | sed -e '/<\!-- Start -->/,/<\!-- End -->/ { r /dev/stdin' -e '; //!d }' file
//
是“最后一场比赛”的简写......所以在这种情况下/START/,/END/{ }
内没有任何其他匹配项{ }
,它将匹配both /START/
and /END/
.
//!d
确保删除除开头和结尾的匹配行之外的范围。
ETA:正如 @potong 在评论中提出的那样,使用r /dev/stdin
似乎是一个特例——只有第一个r
会将任何内容添加到输出流中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)