VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
PowerShellのファイル操作用コマンドレットはいくつかあるのですが、ファイル内の文字列を特定の文字列へ置換するコマンドレットは存在しません。
-replace演算子を使用して、ファイル内の文字列の置換を行う方法を紹介します。
まず、-replace 演算子の使用方法ですが
-replace "置換前の文字列", "置換後の文字列"
という書式になっています。
-replace演算子は大文字と小文字を区別しません。
大文字と小文字を厳密に区別したい場合には、-creplace演算子を使用してください。
まずは実験をしてみたいと思います。
テキストエディタを開いて、下記のように入力して sample.txt として任意のフォルダへ保存してください。
sample.txtABCDE-FGHIJ-KLMNO |
次に PowerShellでこのファイルの "FGHIJ" を "XXXXX" に置換して sample_new.txt というファイルへ保存してみたいと思います。
手順としては、
1.ファイルの内容を取得する
2."FGHIJ"を"XXXXX"に置換する
3.sample_new.txtへ保存する(リダイレクト演算子を使用します)
です。
これをPowerShellでは下記のように1行で実行することができます。
List1PS C:\Work> $(Get-Content "C:\Work\sample.txt") -replace "FGHIJ","XXXXX" > sample_new.txt |
先ほどは sample.txt の内容を置換し、sample_new.txt という別のファイルへ保存しました。
今度は、同一のファイルへ保存してみます。
List2のように入力して実行してみてください。
エラーになってしまったのではないでしょうか?
これは、Get-Contentで開いたファイルが閉じられないうちに、置換した結果を保存しようとするためにおこってしまったものです。
List2PS C:\Work> $(Get-Content "C:\Work\sample.txt") -replace "FGHIJ","XXXXX" > "C:\Work\sample.txt" |
どうでしょうか、sample_new.txtの内容は下記のような結果になりましたか?
sample_new.txtABCDE-XXXXX-KLMNO |
List3のように2行に分けて行えば、同一のファイルに対して置換した結果を書き込むことができます
List3PS C:\Work> $file_contents = $(Get-Content "C:\Work\sample.txt") -replace "FGHIJ","XXXXX" |
上記を踏まえて、Replace-Content という関数を作成してみました。
この関数を実行すると、文字列を置換し上書き保存を行います。
重要なファイルへの置換を行う場合には注意して使用してください。
確認メッセージの表示や、バックアップを取る機能を付加するとより実用的になるかと思います。
Replace-Content.ps1#=============================================================================== |
使用方法は下記の通りです
List4PS C:\Work> Replace-Content "C:\Work\sample.txt" "AAA" "BBB" |