2011-11-10 15 views
5

Powershellを使用して、XMLノードのコンテンツなど、ファイル内で複数行のパターンを見つける方法を教えてください。Powershellを使用してファイル内の複数行のパターンを検索する

つまり私はdeviceDescriptionノード内の「グリーン」という言葉を探していましたが、XMLノードのテキストを複数行にまたがることがあれば、これは動作しません:すべての

dir -r -i *.xml | select-string -Pattern "<deviceDescription>.*green.*</deviceDescription>" 

答えて

9

まず、XMLの場合そのように扱うデバイス記述文字列を抽出して、必要な文字列、この場合は緑にマッチさせます。

$x = [xml] (gc .\test.xml) 
$x.deviceDescription -match "green" 

あなたがその道を行くしたくない場合は、あなたが?s使用する必要があります - *マッチ改行を行い単一行またはDOTALLフラグ:あなたはおそらく使用したい

$x = [IO.File]::ReadAllText("C:\test.xml") 
$x -match "(?s)<deviceDescription>.*green.*</deviceDescription>" 

注意.*?または複数のdeviceDescriptionタグにまたがっている可能性があります。このようなエッジケースは、正規表現を使わないようにする理由です。

+0

ノードのテキストを出力するにはどうすればよいですか?私はこれを持っています:$ x.SelectNodes( "// deviceDescription")|選択オブジェクトノード –

関連する問題