Использование Powershell для поиска многострочных шаблонов в файлах - PullRequest
6 голосов
/ 10 ноября 2011

Как мне найти многострочный шаблон в файлах, таких как содержимое узла XML, с помощью Powershell?

, т.е. если бы я искал слово "зеленый" в узле deviceDescription, нотекст узла XML может занимать несколько строк, это не работает:

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

1 Ответ

10 голосов
/ 10 ноября 2011

Прежде всего, если это xml, извлеките строку описания устройства, обрабатывая ее как таковую, а затем сопоставьте с нужной вам строкой, в данном случае зеленым.

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

Если вы не хотите идти по этому пути, вам придется использовать ?s - однострочный или точечный флаг, который делает * совпадение с новыми строками:

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

Обратите внимание, что вы, вероятно, хотите использовать .*? или это может охватывать несколько тегов deviceDescription. Такие крайние случаи, как это, являются причинами, почему вы должны избегать использования регулярных выражений для таких вещей.

...