maemaewaterの日記

エンジニア兼ゲーマーの人の日記です。PHP/Python/JavaScript/C#/C++などによるプログラムに関することを主に書いています。

PowerShellのGet-Contentと置換(Regular Expression)

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