1. ホーム
  2. powershell

[解決済み] PowerShellを使用してファイル内の複数の文字列を置換する方法

2022-08-13 10:07:33

質問

設定ファイルをカスタマイズするためのスクリプトを書いています。このファイル内の文字列の複数のインスタンスを置換したいので、PowerShell を使用してその作業を行おうとしました。

1 回の置換では問題なく動作しますが、複数の置換を行うには、毎回ファイル全体を再度解析する必要があり、このファイルは非常に大きいため、非常に時間がかかります。スクリプトは次のようなものです。

$original_file = 'path\filename.abc'
$destination_file =  'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
    $_ -replace 'something1', 'something1new'
    } | Set-Content $destination_file

こんなのが欲しいんだけど、どう書けばいいのかわからない。

$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

どのように解決するのですか?

ひとつの方法として -replace の操作を連結することです。この場合 ` は改行をエスケープし、PowerShellは次の行で式の解析を継続します。

$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

もう一つの選択肢は、中間変数を割り当てることです。

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