使用PowerShell替换文件中生成的C#代码

时间:2018-04-20 06:54:31

标签: regex powershell generics replace

我有一个PowerShell脚本,它在预构建事件中运行,该事件打开一个文件

$file="$(get-location)\..\..\Generated.cs"
Write-host $file

$content = Get-Content($file)
$content = $content.replace('input','output')
$content | out-file $file

输入是 generated.cs 文件

中的以下代码行
return new Blablabla<Template>((int)code, a, default<Template>));

输出需要成为

{
var response = new Blablabla<Template>((int)code, a, default<Template>));
response.message = status;
return response;
}

<Template>是可变的。它可以是任何类,甚至是通用列表 我如何在PowerShell中执行此操作?无论我尝试使用正则表达式都失败了 它应该不难,但我在PowerShell或正则表达式方面不是很好

1 个答案:

答案 0 :(得分:0)

以下内容应该按照您的要求替换文本,尽管在.cs文件中这似乎是一个奇怪的替代:

$pattern = 'return (new .*<(.*)>\(\(int\).*, .*, default\(\2\)\);)'

$file = "Generated.cs"

Get-Content -Path $file -Raw |
    ForEach-Object {
        if($_ -match $pattern)
        {
            $template = "
            {
                var response = $($matches[1])
                response.message = status;
                return response;
            }
            "

            $_ -replace $pattern, $template | Out-File $file
        }
    }