powershell 需要一点帮助来查找字符串中的模式

0yg35tkg  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(112)

我正在阅读一个包含一系列版本的XML文件,例如:x1c 0d1x 8.6.22.0至8.6.24.999
我的目标是了解每个条目是否只包含8.6.22*-8.6.22* 的范围,并且在字符串的任何位置都不包含版本8.6.21/3/4。(8.6.22.000,8.6.22.999)我尝试执行此操作,它对(8.6.20.0-8.6.22.999或8.6.1000.0000-8.6.4000.9999)有效,但对(8.6.22.0-8.6.24.999)无效
这是我的代码的一部分:有一个函数可以从XML读取所有版本,并填充我在循环中为每个版本运行的$versions,然后与8.6.22* 进行比较

$compareversion = "8.6.22*"
if (![string]::IsNullOrEmpty($versions)) {
    Write-host "Versions range (Manifest):"   
    foreach ($v in $versions) {
    
        if ($v -notlike $compareversion) {
            Write-host $v -ForegroundColor Red
        
        }
        else {
            Write-host $v
               
        }  
    }
    Write-Host
}

输出为:

Versions range (Manifest):
8.6.22.607-8.6.22.999
8.6.22.0-8.6.22.999999
8.6.22.0-8.6.22.999999
8.6.22.607-8.6.22.999
8.6.22.0-8.6.22.999
8.6.22.0-8.6.22.999
8.6.22.0-8.6.22.999
8.6.22.0-8.6.22.999
8.6.22.0-8.6.24.99999999
8.6.22.0000-8.6.22.9999
8.6.22.0000-8.6.22.9999
8.6.1000.0000-8.6.4000.9999
8.6.22.607-8.6.22.999
8.6.22.000-8.6.24.999
8.6.22.000-8.6.22.999
8.6.22.1-8.6.22.9999
8.6.22.0000-8.6.22.9999
8.6.22.1-8.6.22.9999
8.6.20.0-8.6.22.999
8.6.22.001-8.6.22.999
t40tm48m

t40tm48m1#

你可以使用Version class来帮助你比较每行的开始和结束范围,因为这个类实现了IComparable,所以它使得检查一个版本是高于还是低于目标范围变得非常容易。
假设所有这些范围都存储在$allRanges中:

$allRanges | ForEach-Object {
    $start, $end = [version[]] $_.Split('-')
    if($start -ge '8.6.22' -and $end -lt '8.6.23') {
        return Write-host "In Range: $_" -ForegroundColor Green
    }

    Write-Host "Out of Range: $_" -ForegroundColor Red
}

使用此代码的结果为:

In Range: 8.6.22.607-8.6.22.999
In Range: 8.6.22.0-8.6.22.999999
In Range: 8.6.22.0-8.6.22.999999
In Range: 8.6.22.607-8.6.22.999
In Range: 8.6.22.0-8.6.22.999
In Range: 8.6.22.0-8.6.22.999
In Range: 8.6.22.0-8.6.22.999
In Range: 8.6.22.0-8.6.22.999
Out of Range: 8.6.22.0-8.6.24.99999999
In Range: 8.6.22.0000-8.6.22.9999
In Range: 8.6.22.0000-8.6.22.9999
Out of Range: 8.6.1000.0000-8.6.4000.9999
In Range: 8.6.22.607-8.6.22.999
Out of Range: 8.6.22.000-8.6.24.999
In Range: 8.6.22.000-8.6.22.999
In Range: 8.6.22.1-8.6.22.9999
In Range: 8.6.22.0000-8.6.22.9999
In Range: 8.6.22.1-8.6.22.9999
Out of Range: 8.6.20.0-8.6.22.999
In Range: 8.6.22.001-8.6.22.99

相关问题