Powershell正则表达式组取代

时间:2012-08-03 10:59:41

标签: regex powershell replace

我想替换文件夹中每个脚本文件中的一些文本,我正在尝试使用此PS代码:

$pattern = '(FROM [a-zA-Z0-9_.]{1,100})(?<replacement_place>[a-zA-Z0-9_.]{1,7})'
Get-ChildItem -Path 'D:\Scripts' -Recurse -Include *.sql | ForEach-Object { (Get-Content $_.fullname) -replace $pattern, 'replace text' | Set-Content $_.fullname }

但我不知道如何保留表达式的第一部分,只是替换第二部分。知道我该怎么办?感谢。

1 个答案:

答案 0 :(得分:23)

不确定为表名提供的 regex 是否正确,但无论如何,您可以使用变量$1$2等替换为捕获,并跟随{{3 }:'Doe, John' -ireplace '(\w+), (\w+)', '$2 $1'

请注意,替换模式需要使用单引号('')或替换组说明符的$符号进行转义("`$2 `$1")。

# may better replace with     $pattern = '(FROM) (?<replacement_place>[a-zA-Z0-9_.]{1,7})'
$pattern = '(FROM [a-zA-Z0-9_.]{1,100})(?<replacement_place>[a-zA-Z0-9_.]{1,7})'

Get-ChildItem -Path 'D:\Scripts' -Recurse -Include *.sql | % `
{
   (Get-Content $_.fullname) | % `
     { $_-replace $pattern, '$1 replace text' } | 
     Set-Content $_.fullname -Force
}

如果您需要在替换表达式中引用其他变量(如您所愿),您可以使用双引号字符串并使用反引号转义捕获美元

     { $_-replace $pattern, "`$1 replacement text with $somePoshVariable" } |