Увеличьте номер этой части строки с помощью powershell - PullRequest
0 голосов
/ 23 мая 2018

Я хочу найти номер с определенным форматом из строки и увеличить последний номер на 1, используя powershell.Строка взята из большого текстового файла.

Пример:

$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 голосов
/ 06 июня 2018

В powershell есть тип version, которым вы можете воспользоваться.Далее будет выведена строка бета-версии с приращением.

$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)
0 голосов
/ 23 мая 2018

Это немного неуклюже, но, похоже, работает:

$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, но это ускользает от меня на данный момент.

0 голосов
/ 23 мая 2018

Фрагмент кода с использованием метода Replace of 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

0 голосов
/ 23 мая 2018

Что ж, ответ во многом будет зависеть от того, насколько репрезентативен ваш пример для остальных ваших фактических данных, но для приведенного вами примера:

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...