sed和awk:如何将文件的一部分替换为另一个内容?

Bin*_*hen 6 awk sed

文件a.html:

<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->
Run Code Online (Sandbox Code Playgroud)

我想将中间文本替换为其他文本,如何使用sed/awk /其他工具实现?

Pau*_*ce. 5

如果标记行之间的文本由一行或多行组成:

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/aSome text to insert' a.html
Run Code Online (Sandbox Code Playgroud)

i命令可以改变一个r命令和文件名从文件中读取文本。

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/r filename' a.html
Run Code Online (Sandbox Code Playgroud)


gle*_*man 3

如果您在另一个文件中有新的横幅文本:

awk -v new_file=new_banner.txt '
    /!--TEMPLATE:/ {print; system("cat " new_file); banner=1; next}
    /!--TEMPLATE-END:/ {banner=0}
    banner {next}
    {print}
' a.html
Run Code Online (Sandbox Code Playgroud)