档案a.html:
<!--TEMPLATE: banner-->
blahblah
<!--TEMPLATE-END: banner-->
我想将中间文本替换为其他文本,如何使用sed / awk /其他工具实现?
答案 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
以使其成为就地编辑