用powershell替换字符串后面的文本

时间:2014-06-06 09:26:27

标签: regex string powershell teamcity

大家好我正在使用powershell处理构建脚本,用构建号替换一些cacheBuster值。

我已经用构建号工作正常替换了一个基本字符串。但是,当文件未更新时,它不会从svn中删除,因此我的匹配参数不再有效。

到目前为止我的代码是

JS FILE

 "deps": ["app"],
    "name": "app",
    "urlArgs": "bust=",
    "waitSeconds"  : 60,
    "catchError": {
        "define": true
    }

Powershell脚本

$path = "jsmin\config.js"
$word = "bust="
$replacement = $build
$text = get-content $path 
$newText = $text -replace $word,$replacement
$newText > $path

我想要解决这个问题的方法是找一个像bust = buildnumber这样的变量,然后用buildNumber替换bust =之后的所有文本。我假设我需要一个正则表达式,但不能确定如何。

任何帮助都会很棒

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

$path = "jsmin\config.js"
$word = "bust="
$text = Get-Content $path 
$text -replace ("(?<=$word)" +'(.*?)(?=")'), $build | Set-Content $path

答案 1 :(得分:0)

可能的替代方案。如果您使用的是具有Convert [To | From] -Json的PowerShell版本,则可以将Json转换为PowerShell对象,获取属性名称,检查值,更新目标并将PS对象转换回Json。

比正则表达式更详细,更慢但是一个选项。

$build=(Get-Date).ToString("yyyyMMddhhmmss")

$js = @"
{
 "deps": ["app"],
    "name": "app",
    "urlArgs": "bust=",
    "waitSeconds"  : 60,
    "catchError": {
        "define": true
    }
}
"@ | ConvertFrom-Json 

$pn = ($js | Get-Member -MemberType *Property).Name

$pn | % {
    if($js.$PSItem -match "^bust=") 
    {
        $js.$PSItem="bust=$build"
    }
}

$js | ConvertTo-Json # > "config.js"