How to replace multiple strings in a file using PowerShell How to replace multiple strings in a file using PowerShell powershell powershell

How to replace multiple strings in a file using PowerShell


One option is to chain the -replace operations together. The ` at the end of each line escapes the newline, causing PowerShell to continue parsing the expression on the next line:

$original_file = 'path\filename.abc'$destination_file =  'path\filename.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

Another option would be to assign an intermediate variable:

$x = $_ -replace 'something1', 'something1aa'$x = $x -replace 'something2', 'something2bb'...$x


To get the post by George Howarth working properly with more than one replacement you need to remove the break, assign the output to a variable ($line) and then output the variable:

$lookupTable = @{    'something1' = 'something1aa'    'something2' = 'something2bb'    'something3' = 'something3cc'    'something4' = 'something4dd'    'something5' = 'something5dsf'    'something6' = 'something6dfsfds'}$original_file = 'path\filename.abc'$destination_file =  'path\filename.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


With version 3 of PowerShell you can chain the replace calls together:

 (Get-Content $sourceFile) | ForEach-Object {    $_.replace('something1', 'something1').replace('somethingElse1', 'somethingElse2') } | Set-Content $destinationFile