Powershell多次替换文件

时间:2019-03-06 13:20:36

标签: regex powershell

我在一个配置文件中遵循了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 :(得分:0)

.NET正则表达式不支持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 regex demo

替换模式中的$1代表捕获到组1中的值。请注意转义符`$1-这是必需的,因为双引号文字可能包含外推变量。