Powershell 正则表达式仅替换并返回字符串中的值

问题描述 投票:0回答:1

我有一根绳子

$vardata = " -var subscription_id=SUBSCRIPTION_ID -var tenant_id=TENANT_ID -var kt_subscription_id=KT_SUBSCRIPTION_ID -var ecr_subscription_id=ECR_SUBSCRIPTION_ID " 

我想替换从“-var”到“=”的所有内容,并只获取像

这样的值分配

SUBSCRIPTION_ID

租户_ID

KT_SUBSCRIPTION_ID

ECR_SUBSCRIPTION_ID 并迭代这些值以从 keyvault 生成令牌

等等

我试过了

$kv = [regex]::Matches($vardata-replace '-var*[^=]').Value

似乎不起作用

powershell
1个回答
0
投票

您可以执行 2 种匹配:1 种定位所有键值对,然后另一种分析它们并将它们填充到哈希表中

$vardata = ' -var subscription_id=SUBSCRIPTION_ID -var tenant_id=TENANT_ID -var kt_subscription_id=KT_SUBSCRIPTION_ID -var ecr_subscription_id=ECR_SUBSCRIPTION_ID ' 


$result = [regex]::Matches($vardata, '(?<=-var\s+)[\w=]*')
if ($result) {
    $output = [ordered]@{}

    $result | ForEach-Object {
        if ($_.Value -match '(?<key>\w+)=(?<value>\w+)') {
            $output.Add($Matches.key, $Matches.value)
        }
    }
    $output
}

输出

Name                           Value
----                           -----
subscription_id                SUBSCRIPTION_ID
tenant_id                      TENANT_ID
kt_subscription_id             KT_SUBSCRIPTION_ID
ecr_subscription_id            ECR_SUBSCRIPTION_ID
© www.soinside.com 2019 - 2024. All rights reserved.