Powershell заменить в файле несколько раз - PullRequest
0 голосов
/ 06 марта 2019

Я получил следующую строку 8-9 раз в одном файле конфигурации.

ProxyPass http://servername.de.domain:randomport/randomword

Я построил следующее регулярное выражение:

(?:ProxyPass)[[:blank:]](?=http)(.*)(?=:)

Часть, которую я хочу отредактировать, - это имя_сервера идомен ... Я получаю совпадение с моим регулярным выражением, но я не получаю команду powershell для работы.Я думал о:

(Get-Content $file) -replace $regexProxyPass1, "    ProxyPass http://$serverName.$domain" | Set-Content $file

1 Ответ

0 голосов
/ 06 марта 2019

.NET regex не поддерживает классы символов POSIX. [[:blank:]] следует заменить на \s.

См. Полный фрагмент регулярного выражения замены:

PS> $domain = 'mydomain'
PS> $serverName = 'myservername'
PS> $s = 'ProxyPass http://servername.de.domain:randomport/randomword'
PS> $s -replace '(ProxyPass\s+http://)[^:]+', "`$1$serverName.$domain"
ProxyPass http://myservername.mydomain:randomport/randomword

Детали

  • (ProxyPass\s+http://) - Группа 1: ProxyPass, 1+ пробелов, http://
  • [^:]+ - 1 или более символов, отличных от :

См. Демонстрационный пример .NET .

$1 в шаблоне замены обозначает значение, захваченное в Группу 1. Запомните escape - `$1 - здесь необходимо, поскольку литералы в двойных кавычках могут содержать экстраполированные переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...