我正在开发一个网站的前端代码,我将把它交给一些开发人员,让他们将它与后端集成。该网站将使用.NET编写,但我正在使用静态HTML文件(以及一些javascript)开发前端代码。
因为我在开发环境中使用服务器端包含的所有页面的页眉,页脚和一些其他元素是相同的。但是,每次我将代码交给开发人员时,我都需要通过复制和粘贴手动将每个SSI替换为实际的HTML。这开始变得单调乏味。
我尝试过写一个bash脚本来做这个但是我的bash知识非常有限,所以我失败了(我不确定从哪里开始)。
我试图实现的是:
<!--#include file="myfile.html"-->
)有没有人知道可以做到这一点的脚本,还是能指出我自己实现这个目标的正确方向?只要我能在Mac上运行它,我很高兴能用任何语言。
感谢。
可以安全地假设<!--#include file="myfile.html"-->
的所有实例都在他们自己的行上。
答案 0 :(得分:1)
规范并未涵盖所有细节,因此我有以下假设。
<!--#include file="myfile.html"-->
行保持不变。其他字符将被删除。在这种情况下,这样的事情可以完成这项工作。它位于bash:
#!/usr/bin/bash
search=${1:-./}
replace() {
while read -r x; do
if [[ "$x" =~ \<!--#include\ file=\"([^\.]+.html)\"--\> ]]; then
cat "${BASH_REMATCH[1]}";
else
echo "$x"
fi
done <"$1"
}
while read f; do
replace "$f" > tmp_$$.tmp && mv tmp_$$.tmp "$f"
done < <(find $search -maxdepth 1 -name '*.html')
它读取指定目录中的所有*.html
文件(不递归)。如果没有给出args则检查当前目录。对于每一行,它调用replace
函数。 Replace
搜索包含行。如果找到,则将文件内容打印到标准输出,否则显示原始行。
让我们考虑一下文件:
cat >master.html <<XXX
<html>
<!--#include file="myfile.html"-->
</html>
XXX
cat >myfile.html <<XXX
<title>
My file
</title>
XXX
结果:
$ cat master.html
<html>
<title>
My file
</title>
</html>
$ cat myfile.html
<title>
My file
</title>
我希望这可以帮助......
答案 1 :(得分:0)
在您的开发计算机上,使用浏览器显示网页,然后保存结果&#39;在输出目录中使用适当的文件名。
因此,如果你有mainfile.html执行各种time / last-mod指令,并且在适当的地方包含了fileA.inc和fileB.inc,那么生成的显示(和可保存的HTML文件)将包含所有四个/五个组成部分。
= DN