gpt4 book ai didi

sed - 如何编写一个 `sed` 脚本,用另一个文件的内容替换两个标记之间的文本

转载 作者:行者123 更新时间:2023-12-02 15:49:56 27 4
gpt4 key购买 nike

我正在尝试写一个 sed用另一个文件的内容替换两个标记之间包含的文本的脚本。

假设我有以下带有标记的文件 <!-- Start --><!-- End --> :

# index.html
...
<!-- Start -->
<p>Old content</p>
<!-- End -->
...

我想用这个文件的内容替换封闭的文本:

# snippet.html
<p>New content</p>

我试过这个 sed脚本:

$ cat snippet.html | sed -i -e '/<\!-- Start -->/,/<\!-- End -->/ { r /dev/stdin' -e';d};' index.html

它替换了内容和标记,但我需要保留 <!-- Start --><!-- End -->标记,以便我以后可以再次替换内容。

我应该对 sed 进行哪些更改?脚本?

提前致谢!

最佳答案

您需要对代码做的就是在 d 之前添加 //!:

cat snippet | sed -e '/<\!-- Start -->/,/<\!-- End -->/ { r /dev/stdin' -e '; //!d }' file

// 是“last match”的简写...所以在 /START/,/END/{ } 的情况下 没有任何其他匹配项>{ },它将匹配两者 /START//END/

//!d 确保范围(开始和结束处的匹配行除外)将被删除。

ETA:正如@potong 在评论中提出的那样,r/dev/stdin 的使用似乎是一种特殊情况——只有第一个 r 会添加任何内容到输出流。

关于sed - 如何编写一个 `sed` 脚本,用另一个文件的内容替换两个标记之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72850429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com