Powershell - 从字符串中删除

joe*_*g07 2 windows powershell scripting json

我使用以下语法从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
}
Run Code Online (Sandbox Code Playgroud)

这将以这种方式返回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但它是子网掩码,这很少相同).

我非常感谢这方面的帮助.

谢谢.

mkl*_*nt0 5

-replace基于A 的解决方案:

$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'
Run Code Online (Sandbox Code Playgroud)

请注意如何直接使用数组作为-replace操作的LHS .

以上产量:

0.0.0.0
0.0.0.1
0.0.0.2
0.0.0.3
0.0.0.4
Run Code Online (Sandbox Code Playgroud)

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

foreach ($ip in $ips) {
  ($ip -split '/')[0]
}
Run Code Online (Sandbox Code Playgroud)

可能避免外在的循环,但是这可能不值得做-针对性能和可读性的原因; 它确实显示了PowerShell的灵活性,但是:

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