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

时间:2010-11-30 08:45:51

标签: sed awk

档案a.html:

<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->

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

3 个答案:

答案 0 :(得分:4)

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

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/aSome text to insert' a.html

i命令可以更改为r命令和文件名,以便从文件中读取文本。

sed '/<!--TEMPLATE: banner-->/,/<!--TEMPLATE-END: banner-->/ {//!d}; /<!--TEMPLATE: banner-->/r filename' a.html

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/'

输入

$ cat sedbanner
<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->

输出

$ sed -r 'N;s/(<!--TEMPLATE: banner-->\n).*/\1lalala/' ./sedbanner
<!--TEMPLATE: banner-->
lalala
<!--TEMPLATE-END: banner-->

如果您喜欢输出,请将sed -r替换为sed -ri以使其成为就地编辑