テキストファイルの内容を 1 行ずつ置換、変更したい(PowerShell)

Bash の sed みたいなことが Windows で簡単にできないか調べてみました。

ファイルの内容を読み込む

ファイルの内容を読み込むには Get-Content コマンドレットを使うようです。

PS C:\> Get-Content -Path "C:\Chapters\Chapter1.txt"

-Path オプションに指定したファイルの内容を読み込みます。

ファイルに内容を出力する

ファイルに内容を出力するには Set-Content コマンドレットを使うようです。

PS C:\> Set-Content -Path "C:\Test1\test*.txt" -Value "Hello, World"

-Value オプションに指定した内容を -Path オプションに指定したファイルに出力します。

1 行ずつ処理する

1 行ずつ処理するには ForEach-Object コマンドレットにパイプで渡してあげればいいようです。

PS C:\> (Get-Content -Path "Notice.txt") | ForEach-Object {$_ -replace "Warning", "Caution"} | Set-Content -Path "Notice.txt"

文字列の置換は -replace オペレーターで、文字列の結合は + オペレーターでできるようです。

終わり

PowerShell の標準の文字コードが Unicode になるようです。 -Encoding のオプションを指定することができます。 UTF8 にすることができますが、 UTF-8 with BOM になるようです。

参考