Html Bash脚本,用于在字符串指定的点插入文件中的数据
我想构建一个bash(或其他)脚本,当运行该脚本时,它将(递归地)在自己的目录中搜索具有html扩展名的文件,并在其中更改特定标记之间的所有代码以及来自另一个(特定)文件的内容 我这样做是因为我需要在所有页面上都有一个导航,但是每个页面都有一些小的变化,以后会处理这些变化,所以这个脚本可以帮助我先获取基本信息,然后再修改其余的内容Html Bash脚本,用于在字符串指定的点插入文件中的数据,html,regex,bash,replace,Html,Regex,Bash,Replace,我想构建一个bash(或其他)脚本,当运行该脚本时,它将(递归地)在自己的目录中搜索具有html扩展名的文件,并在其中更改特定标记之间的所有代码以及来自另一个(特定)文件的内容 我这样做是因为我需要在所有页面上都有一个导航,但是每个页面都有一些小的变化,以后会处理这些变化,所以这个脚本可以帮助我先获取基本信息,然后再修改其余的内容 我特别希望用一个本地脚本来实现这一点,而不是用html中的javascript或php代码来替换它。这应该可以让您开始了。它将直接编辑文件,因此进行备份或暂时删除--
我特别希望用一个本地脚本来实现这一点,而不是用html中的javascript或php代码来替换它。这应该可以让您开始了。它将直接编辑文件,因此进行备份或暂时删除
--in-place
开关。创建以下四个文件:
#!/bin/bash
find -name '*.html' | while read FILE; do
sed --in-place -f replace.sed "$FILE"
done
/{{NAV}}/{
r replacement
d
}
<ul>
<li>Here</li>
<li>There</li>
</ul>
占位符
{{NAV}}
在它自己的行上是很重要的,因为sed脚本将删除该行的内容。如果由于任何原因,{{NAV}}可能出现在您的文件中,则应更改占位符。这应该让您开始。它将直接编辑文件,因此进行备份或暂时删除--in-place
开关。创建以下四个文件:
#!/bin/bash
find -name '*.html' | while read FILE; do
sed --in-place -f replace.sed "$FILE"
done
/{{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的正则表达式部分。但是,这仍将删除整行。我假设,如果您要在文件中插入占位符,那么将它们放在自己的行中是没有问题的。如果你不是