PowerShellでのファイル内容の置き換え

 今度はPowerShellでファイルの内容を置き換えてみます。PowerShellでファイル内容を置き換えるには-replaceを指定します。PowerShellでの-replaceについては以下のページを参照するとよいでしょう。

https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_regular_expressions?view=powershell-7.1
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/substitutions-in-regular-expressions

それでは簡単な文字列を置き換えてみましょう。文字列を標準出力に流し-replaceを使って文字列を置き換えます。-replaceの後にマッチする文字列(正確には正規表現文字列)を指定し、その後に,を書きます。そして、その後に置き換える文字列を指定します。 実際にやってみましょう。現在INFOですという文字列を流して、その中にあるINFOの文字列を営業中に置き換えてみましょう。以下のようにコマンドを入力します。

'現在INFOです' -replace 'INFO','営業中'

現在INFOですの文字のうちマッチするINFOだけの文字が置き換わり現在営業中ですと表示されます。
後はGet-Contentでintotemp.txtファイルの内容を出力して-replaceで置き換えればよさそうです。が、Get-Contentに-repalceを指定するとエラーになってしまいます。調べるとforeachを使って繰り返し処理する必要があるようです。(%はforeachの省略形)

Get-Content ファイルパス | foreach { $_ -replace "マッチする文字列","置き換えた後の文字列" }

または

Get-Content ファイルパス | % { $_ -replace "マッチする文字列","置き換えた後の文字列" }

方法がわかれば後は簡単です。ここでは置き換えるテキストファイルの内容を以下のように処理しやすいようにしてあります。置き換えるINFOの単語は1つのみです。複数あればマッチする文字列はすべて置き換えられます。

 ようこそ喫茶マイナビへ。さまざまなレトロUNIXマシンを用意して、お待ちしております。

INFO

 Tel:00-0000-0000
 url:myna-bee.shop

後は以下のコマンドを入力すればINFOの文字列が営業中に置き換わります。

Get-Content infotemp.txt | foreach { $_ -replace 'INFO','営業中' }

念のため準備中に置き換えてみましょう。

Get-Content infotemp.txt | foreach { $_ -replace 'INFO','準備中' }

無事に置き換わったのが確認できたらリダイレクトを使ってファイルに保存すればできあがりです。

Get-Content infotemp.txt | foreach { $_ -replace 'INFO','準備中' } > info.txt

次回はシェルスクリプトを使って、もう少し使いやすくしてみます。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。