Вы можете просто использовать -replace оператор PowerShell и шаблон просмотра в будущее.Посмотрите на этот скрипт ниже
Set-StrictMode -Version "2.0"
$ErrorActionPreference="Stop"
cls
$ip1 = "192.168.13.123"
$tests=@("192.168.13.123" , "192.168.13.1" , "192.168.13.12")
foreach($test in $tests)
{
$patternRegex="\d{1,3}(?=\.\d{1,3}$)"
$newOctet="420"
$ipNew=$test -replace $patternRegex,$newOctet
$msg="OLD ip={0} NEW ip={1}" -f $test,$ipNew
Write-Host $msg
}
Это даст следующее:
OLD ip=192.168.13.123 NEW ip=192.168.420.123
OLD ip=192.168.13.1 NEW ip=192.168.420.1
OLD ip=192.168.13.12 NEW ip=192.168.420.12
Как использовать оператор -replace?
https://powershell.org/2013/08/regular-expressions-are-a-replaces-best-friend/
Понимание схемы, которую я использовал
(? =) В \ d {1,3} (? =. \ D {1,3} $) значит оглянуться назад.
(? =. \ D {1,3} $ in \ d {1,3} (? =. \ D {1,3} $) означает что-либо позади DOT и 1-3 цифры.
Начальная \ d {1,3} - это инструкция для точного совпадения 1-3 цифр
Все в простом английском языке " Дайте мне 1-3 цифры позадиточка и 1-3 цифры, расположенные по направлению к правой границе строки"
Регулярное выражение
https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference
ИСПРАВЛЕНИЕ
Шаблон регулярного выражения - это взгляд вперед , а не взгляд назад .