1

我想构建一个bash(或其他)脚本,运行时将在它自己的目录(递归)中搜索带有html扩展名的文件,并在其中更改特定标签之间的所有代码以及来自另一个(特定)的内容文件。

我这样做是因为我需要在所有页面上进行导航,每个页面都有一些小的变化,稍后会处理,所以这个脚本可以帮助我先获得基础,然后我可以改变休息。

我特别希望在本地使用脚本来执行此操作,而不是用 html 中的 javascript 或 php 代码替换它。

4

2 回答 2

3

这应该让你开始。它将直接编辑文件,因此请进行备份或--in-place暂时删除开关。创建以下四个文件:

  1. 替换.sh:

    #!/bin/bash
    find -name '*.html' | while read FILE; do
            sed --in-place -f replace.sed "$FILE"
    done
    
  2. 替换.sed:

    /{{NAV}}/{
        r replacement
        d
    }
    
  3. 替换:

    <ul>
        <li>Here</li>
        <li>There</li>
    </ul>
    
  4. 文件.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}}”出于某种原因可能出现在您的文件中,则应更改占位符。

于 2012-09-21T04:45:19.650 回答
2

基于 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 ''是否不提供备份;如果你想要它们,只需在引号之间放置一些东西,它就会复制原始文件,并附加你选择的任何内容。

于 2012-09-25T17:13:52.450 回答