PowerShellでテキストの文字列の置換を行いたいなと思ったのですが、いろいろと面白かったのでまとめてみようと思います。
今回は以下のテキストファイルを対象に進めていきます。
hello.htmlというファイル名で保存しています。
<html> <head> <title>hello world</title> </head> <body> <div> <span>hello world</span> </div> </body> </html>
まず、このファイルをPowerShellで利用できるように変数($x)に格納するには次のようにします。
$x = Get-Content -Path .\hello.html -Raw
次に置換をしようと思って次のようにしてみましたが、置換対象が複数行のテキストでは上手く動作しません(ほかに引数があるのかもしれませんが)。
$x -replace "<div>(.*?)</div>",""
このため複数行に対応するために次のように呼び出す必要がありました。
using namespace System.Text; [regex]::Replace($x, "<div>(.*?)</div>", "", [System.Text.RegularExpressions.RegexOptions]::Singleline)
実行結果:
<html> <head> <title>hello world</title> </head> <body> </body> </html>
Replaceメソッドの引数でRegexOptionsを設定することができるようでしたので、設定するのですがusing namespace System.Text
を呼び出しておく必要がありました。
参考にさせていただいたページ: docs.microsoft.com docs.microsoft.com qiita.com docs.microsoft.com winscript.jp