使用 shellscript 用 config.json 中定义的 1-n 个特定值替换 html 文件中的占位符 [关闭]
Posted
技术标签:
【中文标题】使用 shellscript 用 config.json 中定义的 1-n 个特定值替换 html 文件中的占位符 [关闭]【英文标题】:replacing a placeholder in a html file with 1-n specific values defined in a config.json using shellscript [closed] 【发布时间】:2020-10-02 05:20:23 【问题描述】:问题:
我需要用 config.json 文件中定义的 1-n 个特定值替换 html 文件 index.html 中的占位符 (__PLACEHOLDER__
)。
我尝试了什么:
用新内容替换 index.html 中的占位符:
echo "$html//__PLACEHOLDER__/$replace" > index.html
从 json 获取值(不工作):
replace=$(sed 's/.*"host": "\(.*\)"/\1/g;d;t' config.json)
这不是一个好方法,目前不返回所需的值
所以我知道如何替换 html 文件中的值,但在此之前我不知道 如何将我需要的值放入变量中。我已经用 sed 或 perl 试过了,用 sed 但问题是它不是跨平台兼容的。
config.json:
"xxxx":
"description": "xxxxx",
"value":
"to": [
"xxxxxx"
]
,
"xxxx":
"description": "xxx",
"value": "xxxxxx"
,
"API":
"description": "xxxxxxxxx",
"value":
"default":
"host": "VALUE I WANT"
,
"auth":
"host": "VALUE I WANT"
,
default 和 auth 只是一些可能的值,它可能是 1-n 个主机。
最后我想要一个将所有主机作为字符串的变量:host1 host2 host3
信息:我们不能使用系统上通常不存在的任何 3rd 方工具,并且 index.html 文件不感兴趣,我们只是替换占位符值。
感谢您的帮助
【问题讨论】:
您说您不能使用系统上通常不存在的第 3 方工具,但您现在已使用 node.js 进行标记。您没有告诉我们您通常的系统是什么样的,或者您认为是第 3 方。例如,在 Perl 中,这对于将 Perl 5.14 开箱即用的系统很容易实现,因为它在核心中包含一个 JSON 解析器。过去 10 年发布的几乎所有 Linux 发行版都将拥有它。您必须编写少于 10 行代码。不过你的要求不是特别清楚,恐怕帮不了你。 你能给我们一个(小)样本输入文件以及你期望的输出吗? 【参考方案1】:我们不能使用系统上通常不存在的任何第 3 方工具
鉴于我们不知道您使用的是什么“系统”,这并不是一个非常有用的限制。
Perl 有几个可用的 JSON 解析器,自 Perl 5.14(于 2011 年 5 月发布)以来,其中之一 (JSON::PP) 已成为标准 Perl 发行版的一部分。因此,如果您有一个在过去九年发布的 Perl 版本,那么将 JSON 文件读入变量的任务是微不足道的。
#!/user/bin/perl
use strict;
use warnings;
use feature 'say';
use JSON::PP;
use Data::Dumper;
open my $json_fh, '<', 'config.json' or die $!;
my $json = do local $/; <$json_fh> ;
my $config = JSON::PP->new->decode($json);
# Now you have your JSON in a Perl data structure
say Dumper $config;
# You can also access individual values
say $config->xxxxdescription;
say $config->APIvaluedefaulthost;
【讨论】:
是否可以将APIvaluedefaulthost
作为参数提交给您的脚本?
@Cyrus:嗯,你可以使用eval
使各种怪物永存,但我真的不推荐它。可能更好地传递您需要使用的键的表示 - 也许是“API:value:default:host”,然后编写代码来解析它并使用信息在哈希中查找数据。以上是关于使用 shellscript 用 config.json 中定义的 1-n 个特定值替换 html 文件中的占位符 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 inotifywait shellscript 使用两个 PID?
通过 Slackware 上的 shellscript 更改 IP 地址