PowerShell使用通配符替换字符串

时间:2016-06-08 15:21:49

标签: string powershell replace

我在SQL文件中有一个版本号,需要通过PowerShell替换。在文件中它看起来像这样:

values
   ('Current', '15.7.1.0'),
   ('New', '15.7.22.0')

我需要用当前版本替换它,但由于我不知道当前的版本号是什么,也不知道它的确切长度(数字计数可以改变)因为没有使用前导零),我需要使用通配符,而我尝试的并不是在工作。

目前我正在尝试:

$content = Get-Content C:\Users\user\Desktop\sql\file.sql
$newContent = $content -replace "'Current', '*'", "'Current', '$newVersion'"

它实际上找到它并替换它,但不是全部由于某种原因。运行之后,我得到的是:

values
   ('Current', '16.6.21.0'15.7.1.0'),
   ('New', '15.7.22.0')

所以它肯定会在文件中找到正确的位置并对其中的一些进行替换,但实际上并没有替换版本号。谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:2)

正如@PetSorAl所说,-replace使用通配符而非正则表达式。

以下是基于您的示例。

实施例

$content = @"
values
   ('Current', '15.7.1.0'),
   ('New', '15.7.22.0')
"@

$newVersion = '16.6.21.0'
$newContent = $content -replace "'Current', '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'", "'Current', '$newVersion'"
Write-host $newContent

结果

values
   ('Current', '16.6.21.0'),
   ('New', '15.7.22.0')