使用 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 文件中的占位符 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

linux shell基本知识

为啥这个 inotifywait shellscript 使用两个 PID?

通过 Slackware 上的 shellscript 更改 IP 地址

shell简介

在完成MySQL导入后在链接的容器上执行shellscript

shell和shell脚本 有啥区别啊