我必须每周更换多个文件中的某个字符串。我试图使用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;
答案 0 :(得分:2)
我会使用regex
具有正向前瞻和后视:
$userInput = 250
$filePath = 'yourFilePath'
$content = Get-Content $filePath
$content -replace '(?<=\()(\d+)(?=\))', $userInput | Set-Content $filePath
<强>正则表达式:强>
(?<=\()(\d+)(?=\))
修改强> 这里的脚本采用了你的例子:
$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
}