私はPowerShellスクリプトを初めて使用します。シナリオは、最初に出現した文字列を別の値に置き換え、2番目に出現した文字列を別の値に置き換える必要があるというものです。
これまでのところ、私はこれを持っています:
$dbS = Select-String $repoPath\AcceptanceTests\sample.config -Pattern([regex]'dbServer = "@DB_SERVER@"')
write-output $dbS[0]
write-output $dbS[1]
これにより、次のような出力が得られます。
D:\hg\default\AcceptanceTests\sample.config:5: dbServer = "@DB_SERVER@"
D:\hg\default\AcceptanceTests\sample.config:12: dbServer = "@DB_SERVER@"
両方の出現が正しいことがわかり、これは MatchInfo オブジェクトを返します。今度は内容を置き換える必要があります。試してみました:
Get-Content $file | ForEach-Object { $_ -replace "dbserver",$dbS[0] } | Set-Content ($file+".tmp")
Remove-Item $file
Rename-Item ($file+".tmp") $file
しかし、これはすべての出現を置き換え、それもパス全体に置き換えます。助けてください..