我想构建一个bash(或其他)脚本,运行时将在它自己的目录(递归)中搜索带有html扩展名的文件,并在其中更改特定标签之间的所有代码以及来自另一个(特定)的内容文件。
我这样做是因为我需要在所有页面上进行导航,但每个页面都有一些小的变化,稍后会处理,所以这个脚本可以帮助我先获得基础,然后我可以改变休息。
我特别希望在本地使用脚本来执行此操作,而不是用 html 中的 javascript 或 php 代码替换它。
这应该让你开始。它将直接编辑文件,因此请进行备份或--in-place
暂时删除开关。创建以下四个文件:
替换.sh:
#!/bin/bash
find -name '*.html' | while read FILE; do
sed --in-place -f replace.sed "$FILE"
done
替换.sed:
/{{NAV}}/{
r replacement
d
}
替换:
<ul>
<li>Here</li>
<li>There</li>
</ul>
文件.html
<html>
<head></head>
<body>
<nav>
{{NAV}}
</nav>
<h1>Welcome to Whatever!</h1>
</body>
使replace.sh
可执行文件 ( chmod a+x replace.sh
)。通过运行replace.sh
并检查内容来测试它file.html
$ ./replace.sh && cat file.html
<html>
<head></head>
<body>
<nav>
<ul>
<li>Here</li>
<li>There</li>
</ul>
</nav>
<h1>Welcome to Whatever!</h1>
</body>
占位符{{NAV}}
在其自己的行上很重要,因为 sed 脚本将删除该行的内容。如果“{{NAV}}”出于某种原因可能出现在您的文件中,则应更改占位符。
基于 Ben Graham 提供的巨大帮助以及更多研究,这里是我正在寻找的答案。
您将需要一个文件作为脚本 ( replace.sh
),另一个文件作为替换 ( replacementFile
),以及任何其他数量的文件将应用替换。
剧本。replace.sh
#!/bin/bash
find . -name "*.html" | while read FILE; do
sed -i '' '/{{endSTRING}}/r replacementFile
/{{startSTRING}}/,/{{endSTRING}}/d' ${FILE}
done
就是这样。不过,一些额外的点。replacementFile
最后应该有一个空行,否则它将与更改文件的下一行连接。-i ''
是否不提供备份;如果你想要它们,只需在引号之间放置一些东西,它就会复制原始文件,并附加你选择的任何内容。