提问者:小点点

使用shellscript将html文件中的占位符替换为config.json中定义的1-N个特定值


我需要用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的问题是它不是跨平台兼容的,而这是它所需要的。

{
    "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

信息:我们不能使用任何第三方工具,不是通常存在于系统和; index.html文件没有任何意义,我们只是替换占位符值。

我很感激你的帮助


共1个答案

匿名用户

我们不能使用系统中通常不存在的任何第三方工具

考虑到我们不知道您使用的是什么“系统”,这不是一个非常有用的限制告诉我们。

Perl有几个可用的JSON解析器,自Perl5.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->{xxxx}{description};
say $config->{API}{value}{default}{host};