Ter*_*nce 1 regex powershell guid
我正在尝试编写一个在找到匹配项时生成新GUID的脚本.我的问题是我一直为所有匹配生成相同的GUID.如何在不为所有匹配项生成相同GUID的情况下执行此操作?
$testString = @"
[assembly: Guid Should Replace]
[assembly: Guid Should Replace]
[assembly: Guid Should Replace]
"@
#expected output
#[assembly: "unique guid"]
function ReplaceWithNewGuid {
param($content)
$retval = ($content -ireplace '(?m)(\[assembly: Guid.*$)+', "[assembly: Guid(`"$([guid]::NewGuid())`"]`)")
return $retval
}
ReplaceWithNewGuid($testString)
Run Code Online (Sandbox Code Playgroud)
实际输出示例:
[议会:Guid("29e784aa-ba4a-4a45-85b8-d6b52916b539"])
[议会:Guid("29e784aa-ba4a-4a45-85b8-d6b52916b539"])
[议会:Guid("29e784aa-ba4a-4a45-85b8-d6b52916b539"])
@Mathias R. Jessen的答案帮助我得到了我需要的东西.我想我可以在powershell中使用.net框架库来实现这一点但是,这可以按预期工作.
function ReplaceWithNewGuid {
param($content)
$retval = [regex]::Replace($testString, '(?m)(\[assembly: Guid.*$)+', {param($m) return "[assembly: Guid(`""+ (New-Guid).Guid + "`")]"}, 'IgnoreCase')
return $retval
}
Run Code Online (Sandbox Code Playgroud)
您可以Regex.Replace()直接使用,允许您传递一个scriptblock来代替MatchEvaluator委托参数:
$testString = @"
[assembly: Guid Should Replace]
[assembly: Guid Should Replace]
[assembly: Guid Should Replace]
"@
[regex]::Replace($testString, 'Guid Should Replace', {param($m) return (New-Guid).Guid}, 'IgnoreCase')
Run Code Online (Sandbox Code Playgroud)
您应该看到它返回3个不同的标识符
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |