Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Bash脚本,用于在字符串指定的点插入文件中的数据_Html_Regex_Bash_Replace - Fatal编程技术网

Html Bash脚本,用于在字符串指定的点插入文件中的数据

Html Bash脚本,用于在字符串指定的点插入文件中的数据,html,regex,bash,replace,Html,Regex,Bash,Replace,我想构建一个bash(或其他)脚本,当运行该脚本时,它将(递归地)在自己的目录中搜索具有html扩展名的文件,并在其中更改特定标记之间的所有代码以及来自另一个(特定)文件的内容 我这样做是因为我需要在所有页面上都有一个导航,但是每个页面都有一些小的变化,以后会处理这些变化,所以这个脚本可以帮助我先获取基本信息,然后再修改其余的内容 我特别希望用一个本地脚本来实现这一点,而不是用html中的javascript或php代码来替换它。这应该可以让您开始了。它将直接编辑文件,因此进行备份或暂时删除--

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

我这样做是因为我需要在所有页面上都有一个导航,但是每个页面都有一些小的变化,以后会处理这些变化,所以这个脚本可以帮助我先获取基本信息,然后再修改其余的内容


我特别希望用一个本地脚本来实现这一点,而不是用html中的javascript或php代码来替换它。

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

  • replace.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>
    

    占位符
    {{NAV}}
    在它自己的行上是很重要的,因为sed脚本将删除该行的内容。如果由于任何原因,{{NAV}}可能出现在您的文件中,则应更改占位符。

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

  • replace.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>
    

    占位符
    {{NAV}}
    在它自己的行上是很重要的,因为sed脚本将删除该行的内容。如果“{NAV}}”可能出于任何原因出现在您的文件中,则应更改占位符。

    基于Ben Graham提供的巨大帮助和更多的研究,以下是我所寻找的答案

    您需要一个文件作为脚本(
    replace.sh
    ),另一个文件作为替换文件(
    replacementFile
    ),以及将应用替换的任何其他数量的文件

    剧本<代码>替换.sh

    #!/bin/bash
    find . -name "*.html" | while read FILE; do
        sed -i '' '/{{endSTRING}}/r replacementFile
        /{{startSTRING}}/,/{{endSTRING}}/d' ${FILE}
    done
    

    就这样。不过,还有一些额外的要点
    replacementFile
    的末尾应该有一个空行,否则它将连接到已修改文件的下一行<代码>-i''不提供备份;如果你想要它们,只要在引号之间放一些东西,它就会用你选择的任何附加内容复制原始文件。

    基于Ben Graham提供的巨大帮助和更多的研究,以下是我所寻找的答案

    您需要一个文件作为脚本(
    replace.sh
    ),另一个文件作为替换文件(
    replacementFile
    ),以及将应用替换的任何其他数量的文件

    剧本<代码>替换.sh

    #!/bin/bash
    find . -name "*.html" | while read FILE; do
        sed -i '' '/{{endSTRING}}/r replacementFile
        /{{startSTRING}}/,/{{endSTRING}}/d' ${FILE}
    done
    

    就这样。不过,还有一些额外的要点
    replacementFile
    的末尾应该有一个空行,否则它将连接到已修改文件的下一行<代码>-i''不提供备份;如果您需要,只需在引号之间放置一些内容,它就会用您选择的附加内容复制原始文件。

    使用某种服务器端包含。比您尝试执行的操作更简单、更可预测。导航将在每个页面中进行小的更改,并且文件将在本地查看。任何一种仅将文件包含在其中的解决方法都是不可行的。服务器上的小更改都没有问题,但是,如果要在本地查看这些更改,它们必须很好地进行,这是非常有意义的。我可以建议在准备好后编写一个脚本来组装这些文件吗?正则表达式无法真正可靠地处理HTML(尽管它可能适用于您的特定情况),这使得这成为一个难题。您是否至少可以使用自定义标记来标识插入点?也许HTML注释
    是的,我想在这里做一些像
    导航
    ,或者在两个特定注释之间进行导航,以便尽可能明确。我似乎记得几年前看到过一些使用
    cat
    的东西,它可以只获取完整外部文件的内容,而不必担心诸如转义字符之类的问题。我在考虑这些问题。使用某种服务器端包含。比您尝试执行的操作更简单、更可预测。导航将在每个页面中进行小的更改,并且文件将在本地查看。任何一种仅将文件包含在其中的解决方法都是不可行的。服务器上的小更改都没有问题,但是,如果要在本地查看这些更改,它们必须很好地进行,这是非常有意义的。我可以建议在准备好后编写一个脚本来组装这些文件吗?正则表达式无法真正可靠地处理HTML(尽管它可能适用于您的特定情况),这使得这成为一个难题。您是否至少可以使用自定义标记来标识插入点?也许HTML注释
    是的,我想在这里做一些像
    导航
    ,或者在两个特定注释之间进行导航,以便尽可能明确。我似乎记得几年前看到过一些使用
    cat
    的东西,它可以只获取完整外部文件的内容,而不必担心诸如转义字符之类的问题。我正在考虑这些行。尝试编辑您的find命令,将要搜索的目录作为“.”(OSX给我一个错误,它不存在),但“编辑至少需要六个字符”。它似乎工作得很好,这几乎是我想要的,只是缺少一个细节。如何编辑replace.sed以替换两个字符串之间的文本?比如说,在{startNAV}和{{endNAV}之间,你可以用
    /.{startNAV}.*{endNAV}./
    替换replace.sed的正则表达式部分。但是,这仍将删除整行。我假设,如果您要在文件中插入占位符,那么将它们放在自己的行中是没有问题的。如果你不是