7 Stimmen

Mit Powershell mehrzeilige Muster in Dateien finden

Wie würde ich mit Powershell ein mehrzeiliges Muster in Dateien finden, wie z.B. den Inhalt eines XML-Knotens?

d.h. wenn ich nach dem Wort "green" innerhalb des deviceDescription Knotens suche, aber der Text des XML-Knotens über mehrere Zeilen gehen kann, funktioniert dies nicht:

dir -r -i *.xml | select-string -Pattern ".*green.*"

10voto

manojlds Punkte 273771

Zunächst einmal, wenn es sich um XML handelt, extrahieren Sie die Gerätebeschreibung als Zeichenfolge und suchen Sie dann nach der gewünschten Zeichenfolge, in diesem Fall "grün".

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

Wenn Sie nicht auf diese Weise vorgehen möchten, müssen Sie die ?s - Singleline- oder Dotall-Flag verwenden, das bedeutet, dass * Zeilenumbrüche übereinstimmt:

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

Beachten Sie, dass Sie wahrscheinlich .*? verwenden möchten, da sich dies über mehrere deviceDescription-Tags erstrecken könnte. Randfälle wie dieser sind Gründe, warum Sie Regex für solche Dinge vermeiden sollten.

0 Stimmen

Wie kann ich den Text des Knotens ausgeben? Ich habe das: $x.SelectNodes("//deviceDescription") | select-object Node

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X