使用powershell增加使用字符串部分的数字

时间:2018-05-23 13:33:55

标签: powershell

我想从字符串中搜索具有特定格式的数字,并使用powershell将最后一个数字增加1。该字符串取自大型txt文件。

示例:

$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0200, Prod 3.4.0104"

我想将测试版增加1(2.0.0200 ==> 2.0.0201),

运行powershell命令后:

$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0201, Prod 3.4.0104"

4 个答案:

答案 0 :(得分:0)

嗯,答案很大程度上取决于您的示例对其余实际数据的代表性,但对于您给出的示例:

$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0200, Prod 3.4.0104"
$str -match ('^(.+), (Beta = )(.+),(.+)$')
$ver = $matches[3].split('.')
$ver[2] = '{0:0000}' -f ([int]$ver[2] + 1)
$newVerStr = $ver -join '.'
$newStr = '{0}, {1}{2},{3}' -f $matches[1], $matches[2], $newVerStr, $matches[4]
$newStr

答案 1 :(得分:0)

这有点笨重,但似乎有效:

$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0201, Prod 3.4.0104"

if($str -match "(?<=Beta = \d+\.\d+\.)(?<bv>\d+)")
{
    $str -replace "(?<=Beta = \d+\.\d+\.)(\d+)", ("{0:0000}" -f (([int]::Parse($matches.bv)+1)))
}

可能有一种方法可以让它在-Replace的一行中工作,但暂时还没有我这样做。

答案 2 :(得分:0)

使用替换System.Text.RegularExpressions.Regex的方法的代码片段:

$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0200, Prod 3.4.0104"
[regex]::Replace($str, '(?<Head>.+\.)(?<Beta>\d+)(?<Tail>,[^,]+)$',
  { param( [System.Text.RegularExpressions.Match]$m )
    $bv = 1 + $m.Groups['Beta'].Value
    '{0}{1:0000}{2}' -f $m.Groups['Head'].Value,$bv,$m.Groups['Tail'].Value
  }
)

输出:

Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0201, Prod 3.4.0104

答案 3 :(得分:0)

您可以利用PowerShell中的version类型。以下将输出增加的beta版本字符串。

$originalString = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0200, 
Prod 3.4.0104"

$parsedString = $originalString.Split(' ')
$betaVersionStr = $parsedString[8].TrimEnd(',')
$betaVersion = [version]$betaVersionStr

# you can always condense those lines above if you want
# $betaVersion = [version]$originalString.Split(' ')[8].TrimEnd(',')

"{0}.{1}.{2:d4}" -f $betaVersion.Major, $betaVersion.Minor, ($betaVersion.Build + 1)