@neitri

Дополнительные пробелы при замене регулярным выражением на PowerShell?

Есть файл в котором записаны значения через | . Выглядит примерно так
PARAM_ONE|1|N
PORT|1|502
PARAM_TWO|1|0

Мне необходимо изменить PORT|1|502 на PORT|1|500
Использую для этого выражение (PORT\|\d+\|)(\d+) с заменой $1 500
В итоге получаю строку PORT|1| 500 в которой появился пробел.

Такой командой командой пытаюсь сделать замену.
"PORT|1|502" -creplace "(PORT\|\d+\|)(\d+)",'$1 500'
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
@dodo512
"PORT|1|502" -creplace "(PORT\|\d+\|)(\d+)", '${1}500'


"PORT|1|502" -creplace "(?<=PORT\|\d+\|)\d+", '500'
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@azarij
В меру опытный никто
костыль конечно, но работает. нужен просто какой-то уникальный разделитель и еще один прогон замены:

"PORT|1|502" -replace "(PORT\|\d+\|)(\d+)","`$1 500" -replace " "
или
"PORT|1|502" -replace "(PORT\|\d+\|)(\d+)","`$1zhopa500" -replace "zhopa"

UPD: заменил одинарные кавычки на двойные и добавил обратную кавычку к $1

UPD: вот так работает:
$port="500"
"PORT|1|502" -replace "(PORT\|\d+)\|(\d+)","`$1|$port"
Ответ написан
Комментировать
@neitri Автор вопроса
Получилось ещё вот так:
"PORT|1|502" -creplace "(PORT\|\d+)\|(\d+)",'$1|500'

Но это какой то костыль все равно.
Проблема в том что в строке замены нельзя написать $1500 т.к. аргументы нельзя разделить (цифры объединяются) Может можно как то переменную указать вместо второго аргумента $1$port но так переменную $port не видно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы