Изменить 3-й октет IP в формате строки с помощью PowerShell

Я думаю, что нет встроенной функции для удаления пустой строки в Java. Вы можете удалить пустую строку удаления, но это может привести к ошибке. Для безопасности вы можете сделать это, написав небольшой фрагмент кода следующим образом:

  List<String> list = new ArrayList<String>();

  for(String str : test) 
  {
     if(str != null && str.length() > 0) 
     {
         list.add(str);
     }
  }

  test = stringList.toArray(new String[list.size()]);
3
задан Guy Wood 27 February 2019 в 16:36
поделиться

5 ответов

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

$IP = "192.168.13.1"
$octets = $IP.Split(".")                        # or $octets = $IP -split "\."
$octets[2] = [string]([int]$octets[2] + 1)      # or other manipulation of the third octet
$newIP = $octets -join "."

$newIP
0
ответ дан Jeff Zeitlin 27 February 2019 в 16:36
поделиться

Вот немного другой метод. [ ухмыляясь ] мне удалось не заметить ответ Джеффа Цейтлина, пока я не закончил это.

[edit - спасибо Джеффу Зейтлину за напоминание, что ОП хочет получить конечный результат в виде строки. упс! [* blush *]]

что он делает ...

  • разбивает строку на точки
  • помещает это в массив [int] & амп; принуждает элементы в этот тип
  • увеличивает элемент в целевом слоте
  • соединяет элементы обратно в строку с точкой для разделителя
  • преобразует это в IP-адрес type
  • добавляет строку для преобразования IP-адреса в строку

вот код ...

$OriginalIPv4 = '1.1.1.1'
$TargetOctet = 3

$OctetList = [int[]]$OriginalIPv4.Split('.')
$OctetList[$TargetOctet - 1]++

$NewIPv4 = [ipaddress]($OctetList -join '.')

$NewIPv4
'=' * 30
$NewIPv4.IPAddressToString

output ...

[ 111]
0
ответ дан Lee_Dailey 27 February 2019 в 16:36
поделиться

Вы можете просто использовать оператор -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?

[ 112] 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

ИСПРАВЛЕНИЕ

Шаблон регулярного выражения это взгляд в будущее , а не взгляд в прошлое .

0
ответ дан Sau001 27 February 2019 в 16:36
поделиться
function Replace-3rdOctet {
    Param(
        [string]$GivenIP,
        [string]$New3rdOctet
    )
    $GivenIP -match '(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})' | Out-Null
    $Output = "$($matches[1]).$($matches[2]).$New3rdOctet.$($matches[4])"
    Return $Output
}

Скопируйте в файл ps1 и поставьте его из командной строки, затем введите

Replace-3rdOctet -GivenIP '100.201.190.150' -New3rdOctet '42'

Вывод: 100.201.42.150

Оттуда вы можете добавить дополнительную обработку ошибок и т. Д. для случайного ввода и т. д.

0
ответ дан ErikW 27 February 2019 в 16:36
поделиться

Если у вас есть PowerShell Core (v6.1 или выше), вы можете объединить -replace с заменой на основе блока сценариев :

PS> '192.168.13.1' -replace '(?<=^(\d+\.){2})\d+', { 1 + 

Если у вас есть PowerShell Core (v6.1 или выше), вы можете объединить -replace с заменой на основе блока сценариев :

[110]
  • Отрицательное обратное утверждение (?<=^(\d+\.){2}) сопоставляет все до 3-го октета, но не включает его, не считая его частью общего соответствия для замены. ,

    • (?<=...) является проверочным утверждением, \d+ соответствует одной или нескольким (+) цифрам (\d), \. и литералу [ 118], а {2} соответствует предыдущему подвыражению ((...)) 2 раза.
  • \d+ затем соответствует только 3-му октету; поскольку больше ничего не найдено, оставшаяся часть строки (. и 4-й октет) остается на месте.

  • Внутри блока замещающего сценария ({ ... })

    Если у вас есть PowerShell Core (v6.1 или выше), вы можете объединить [111] с заменой на основе блока сценариев :

    [110]
    • Отрицательное обратное утверждение [112] сопоставляет все до 3-го октета, но не включает его, не считая его частью общего соответствия для замены. ,

      • [113] является проверочным утверждением, [114] соответствует одной или нескольким ([115]) цифрам ([116]), [117] и литералу [ 118], а [119] соответствует предыдущему подвыражению ([1110]) 2 раза.
    • [1111] затем соответствует только 3-му октету; поскольку больше ничего не найдено, оставшаяся часть строки ([1112] и 4-й октет) остается на месте.

    • Внутри блока замещающего сценария ([1113]) [1114] ссылается на результаты сопоставления в виде экземпляра [MatchInfo] ; его .Value - это совпадающая строка, то есть 3-й октет, к которому можно добавить 1.

      • Примечание к типу данных: при использовании 1, неявного [int], в качестве LHS , RHS (строка .Value ) неявно приводится в действие на [int] (вы можете использовать явное приведение).
        На выходе все, что возвращает блок скрипта, автоматически приводится к строке . ​​

    Если вы должны поддерживать совместимость с Windows PowerShell , рассмотрите полезный ответ Джеффа Цейтлина .

    ссылается на результаты сопоставления в виде экземпляра [MatchInfo] ; его .Value - это совпадающая строка, то есть 3-й октет, к которому можно добавить 1.

    • Примечание к типу данных: при использовании 1, неявного [int], в качестве LHS , RHS (строка .Value ) неявно приводится в действие на [int] (вы можете использовать явное приведение).
      На выходе все, что возвращает блок скрипта, автоматически приводится к строке . ​​

Если вы должны поддерживать совместимость с Windows PowerShell , рассмотрите полезный ответ Джеффа Цейтлина .

.Value } 192.168.14.1
  • Отрицательное обратное утверждение (?<=^(\d+\.){2}) сопоставляет все до 3-го октета, но не включает его, не считая его частью общего соответствия для замены. ,

    • (?<=...) является проверочным утверждением, \d+ соответствует одной или нескольким (+) цифрам (\d), \. и литералу [ 118], а {2} соответствует предыдущему подвыражению ((...)) 2 раза.
  • \d+ затем соответствует только 3-му октету; поскольку больше ничего не найдено, оставшаяся часть строки (. и 4-й октет) остается на месте.

  • Внутри блока замещающего сценария ({ ... })

    Если у вас есть PowerShell Core (v6.1 или выше), вы можете объединить [111] с заменой на основе блока сценариев :

    [110]
    • Отрицательное обратное утверждение [112] сопоставляет все до 3-го октета, но не включает его, не считая его частью общего соответствия для замены. ,

      • [113] является проверочным утверждением, [114] соответствует одной или нескольким ([115]) цифрам ([116]), [117] и литералу [ 118], а [119] соответствует предыдущему подвыражению ([1110]) 2 раза.
    • [1111] затем соответствует только 3-му октету; поскольку больше ничего не найдено, оставшаяся часть строки ([1112] и 4-й октет) остается на месте.

    • Внутри блока замещающего сценария ([1113]) [1114] ссылается на результаты сопоставления в виде экземпляра [MatchInfo] ; его .Value - это совпадающая строка, то есть 3-й октет, к которому можно добавить 1.

      • Примечание к типу данных: при использовании 1, неявного [int], в качестве LHS , RHS (строка .Value ) неявно приводится в действие на [int] (вы можете использовать явное приведение).
        На выходе все, что возвращает блок скрипта, автоматически приводится к строке . ​​

    Если вы должны поддерживать совместимость с Windows PowerShell , рассмотрите полезный ответ Джеффа Цейтлина .

    ссылается на результаты сопоставления в виде экземпляра [MatchInfo] ; его .Value - это совпадающая строка, то есть 3-й октет, к которому можно добавить 1.

    • Примечание к типу данных: при использовании 1, неявного [int], в качестве LHS , RHS (строка .Value ) неявно приводится в действие на [int] (вы можете использовать явное приведение).
      На выходе все, что возвращает блок скрипта, автоматически приводится к строке . ​​

Если вы должны поддерживать совместимость с Windows PowerShell , рассмотрите полезный ответ Джеффа Цейтлина .

0
ответ дан mklement0 27 February 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: