如何使用PowerShell替换文件中的多个字符串
我正在编写用于定制配置文件的脚本。 我想要替换此文件中的多个字符串实例,并尝试使用PowerShell来完成这项工作。
它对于单个替换很好,但是多次替换非常缓慢,因为每次都需要再次解析整个文件,而且这个文件非常大。 该脚本如下所示:
$original_file = 'pathfilename.abc'
$destination_file = 'pathfilename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1new'
} | Set-Content $destination_file
我想要这样的东西,但我不知道如何编写它:
$original_file = 'pathfilename.abc'
$destination_file = 'pathfilename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1aa'
$_ -replace 'something2', 'something2bb'
$_ -replace 'something3', 'something3cc'
$_ -replace 'something4', 'something4dd'
$_ -replace 'something5', 'something5dsf'
$_ -replace 'something6', 'something6dfsfds'
} | Set-Content $destination_file
一种选择是将-replace
操作链接在一起。 每行末尾的`
都会转义换行符,导致PowerShell继续解析下一行的表达式:
$original_file = 'pathfilename.abc'
$destination_file = 'pathfilename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1aa' `
-replace 'something2', 'something2bb' `
-replace 'something3', 'something3cc' `
-replace 'something4', 'something4dd' `
-replace 'something5', 'something5dsf' `
-replace 'something6', 'something6dfsfds'
} | Set-Content $destination_file
另一个选择是分配一个中间变量:
$x = $_ -replace 'something1', 'something1aa'
$x = $x -replace 'something2', 'something2bb'
...
$x
为了让George Howarth的帖子能够在多个替代品中正常工作,您需要删除中断,将输出分配给一个变量($ line),然后输出变量:
$lookupTable = @{
'something1' = 'something1aa'
'something2' = 'something2bb'
'something3' = 'something3cc'
'something4' = 'something4dd'
'something5' = 'something5dsf'
'something6' = 'something6dfsfds'
}
$original_file = 'pathfilename.abc'
$destination_file = 'pathfilename.abc.new'
Get-Content -Path $original_file | ForEach-Object {
$line = $_
$lookupTable.GetEnumerator() | ForEach-Object {
if ($line -match $_.Key)
{
$line = $line -replace $_.Key, $_.Value
}
}
$line
} | Set-Content -Path $destination_file
使用PowerShell的第3版,您可以将替换调用链接在一起:
(Get-Content $sourceFile) | ForEach-Object {
$_.replace('something1', 'something1').replace('somethingElse1', 'somethingElse2')
} | Set-Content $destinationFile
链接地址: http://www.djcxy.com/p/29111.html
上一篇: How to replace multiple strings in a file using PowerShell