【问题标题】:Powershell - Remove from stringPowershell - 从字符串中删除
【发布时间】:2017-12-18 17:21:46
【问题描述】:

我使用以下语法从 JSON 文件中提取 IP 列表

$Request = 'https://url-to-json.com/file.json'
$AWSIPs = Invoke-WebRequest $Request | ConvertFrom-Json | Select-Object prefix -ExpandProperty prefixes -ExcludeProperty ("/.*") | Where-Object -Property "service" -EQ "service_name" | select ip_prefix
foreach ($awsip in $AWSIPs){
echo $awsip
}

这会以这种方式返回 IP 列表: - 0.0.0.0/00

  • 0.0.0.0/00
  • 0.0.0.0/00
  • 0.0.0.0/00
  • 0.0.0.0/00
  • 0.0.0.0/00

我需要使用这个 IP 列表,但在我这样做之前,我需要删除最后的 /00(显然这不是 00,而是子网掩码,它很少相同)。

非常感谢您对此的帮助。

谢谢。

【问题讨论】:

    标签: json windows powershell scripting


    【解决方案1】:

    基于-replace 的解决方案:

    $ips =  '0.0.0.0/00',
            '0.0.0.1/01',
            '0.0.0.2/02',
            '0.0.0.3/03',
            '0.0.0.4/04'
    
    $ips -replace '(.*)/.*', '$1'
    

    注意如何将数组直接用作-replace 操作的 LHS。

    以上产出:

    0.0.0.0
    0.0.0.1
    0.0.0.2
    0.0.0.3
    0.0.0.4
    

    -split 也是一个选项,但为了避免额外的复杂性,您需要一个显式循环:

    foreach ($ip in $ips) {
      ($ip -split '/')[0]
    }
    

    可以避免显式循环,但出于性能和可读性的原因,这可能不值得这样做;但是,它确实显示了 PowerShell 的灵活性:

    ($ips -split '/')[(0..($ips.Count-1)).ForEach({ $_ * 2 })]
    

    【讨论】:

      猜你喜欢
      • 2023-01-18
      • 2013-10-10
      • 2017-05-27
      • 1970-01-01
      • 2019-10-23
      • 2022-01-12
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多