每周从多个文件中替换字符串

时间:2016-08-23 11:54:03

标签: powershell replace

我必须每周更换多个文件中的某个字符串。我试图使用PowerShell简化该过程,必须更换的行如下:

extract_mdp_staging_error(149);

其他文件看起来相同,但字符串与ex。

不同
extract_kdp_staging(149);
extract_zub_staging_error(149);
...

有没有办法告诉我的脚本只是在()中搜索文本部分并用用户输入替换它?因为我不能使用硬编码搜索,因为下周不会有149但是150等等。

修改 我一直在使用脚本将PowerShell替换为文件中的整行以用于其他应用程序,但我无法弄清楚如何对其进行编码,因此它只替换括号中的部分。 PowerShell脚本:

Get-ChildItem C:\Users\mosermich\Desktop\Extractor\Ressources -Filter '*.sql' -ErrorAction Stop | ForEach-Object {
        $content = Get-Content $_.Fullname
        $content[7] = '   rel.nr sqlldr {0}' -f $releasenr
        $content | Set-Content -Path $_.FullName
        }

这是我需要替换第2行()中的数字的文件之一:

begin
extract_zdlb_staging(149);
commit;
end;
/ 
quit; 

1 个答案:

答案 0 :(得分:2)

我会使用regex具有正向前瞻和后视:

$userInput = 250
$filePath = 'yourFilePath'

$content = Get-Content $filePath
$content -replace '(?<=\()(\d+)(?=\))', $userInput | Set-Content $filePath

<强>正则表达式:

(?<=\()(\d+)(?=\))

Regular expression visualization

修改 这里的脚本采用了你的例子:

$userInput = 250 # The number you want to put in the parentheses
Get-ChildItem C:\Users\mosermich\Desktop\Extractor\Ressources -Filter '*.sql' -ErrorAction Stop | 
    ForEach-Object {
        $content = Get-Content $_.Fullname
        $content -replace '(?<=\()(\d+)(?=\))', $userInput | Set-Content $_.Fullname
    }