Powershell - Regulären Ausdruck Mehrere Übereinstimmungen
Vielleicht ist meine Argumentation fehlerhaft ist, aber ich kann nicht damit es funktioniert.
Hier ist meine regex: (Device\s#\d(\n.*)*?(?=\n\s*Device\s#|\Z))
Probieren Sie es aus: http://regex101.com/r/jQ6uC8/6
$getdevice
ist der input-string. Ich bin immer dieser string aus dem Stream ein - /Ausgabe eines command-line-tool.
$dstate = $getdevice |
select-string -pattern '(Device\s#\d(\n.*)*?(?=\n\s*SSD\s+|\Z))' -AllMatches |
% { $_ -match '(Device\s#\d(\n.*)*?(?=\n\s*SSD\s+|\Z))' > $null; $matches[0] }
Write-Host $dstate
Ausgabe:
Gerät #0-Gerät #1 Gerät #2 Gerät #3-Gerät #4
Gleiche Ausgabe für $matches[1], $matches[2] ist leer.
Gibt es eine Möglichkeit, ich kann alle Spiele, wie auf regex101.com? Ich versuche zur Spaltung der Ausgabe/String in verschiedene Variablen (eine für Device0, eine für Device1, Device2, und so weiter).
Update: Hier ist die Ausgabe von dem Befehl Linie Werkzeug: http://pastebin.com/BaywGtFE
Hallo @aliteralmind ! Ich versuchte mein bestes - vielen Dank für Ihr update. Wird im Hinterkopf behalten für zukünftige Fragen.
InformationsquelleAutor Frankstar | 2014-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich deine Beispieldaten in eine here-Zeichenfolge für meine Prüfung. Sollte dies funktionieren, obwohl es kann davon abhängen, wo Sie Ihre sample-Daten kommt.
Mithilfe von powershell 3.0 habe ich Folgendes
oder wenn Ihr PowerShell-Version unterstützt...
Gibt 4 Objekte mit Ihrer Geräte-id. Ich weiß nicht, ob Sie wollte diese oder nicht, aber der reguläre Ausdruck geändert werden kann, mit lookarounds, wenn Sie nicht brauchen diese. Ich aktualisiert die regex-zu-Konto für die Geräte-id mit einer Ziffer als auch für den Fall, dass das passiert.
Den Modifikatoren, die ich verwendet
Anderen regex-Muster das funktioniert auf diese Weise, die kürzer ist
Device #0
Device #1
ich denke, das ist etwas, was mit dem Zeilenvorschub oder Wagenrücklauf. vielleicht Brauch ich auch konvertieren Sie die Ausgabe von Kommandozeilen-Tools / exe. mein string ist hier gespeichert
$getdevice = .\arcconf.exe getconfig $cid PD
sowieso die Ausgabe von aussieht das gleicheNur die Lösung gefunden. ich Pipe die Ausgabe Trog
Out-Sting
Beispiel:$getdevice = .\arcconf.exe getconfig $cid PD | Out-String
jetzt seine Arbeit.InformationsquelleAutor Matt
Mit Ihrem vorhandenen regex, um eine Liste mit allen gefundenen übereinstimmungen in einem string verwenden Sie eine der folgenden Optionen:
Option 1
Option 2
InformationsquelleAutor zx81
Während es nicht genau Ihre Frage zu beantworten, ich biete einen etwas anderen Ansatz:
Nur zum Spaß,
PSObject
undConvertFrom-StringData
wow, hatte nicht erwartet so eine schöne Lösung. trotzdem bekomme ich einige Fehler mit der "real-time" - Input - /sring. pastebin.com/0uChjGa1. Aber seine arbeiten mit den sample-Ausgang/String ich vorgesehen, so dass die genau richtig ist Recht. nur müssen auch herausfinden, das problem und, wenn ich weiterhin mit diesem Werk genau richtig/Lösung. ty
wie auch gepostet Matts Antwort .. ich geleitet die commandline Ausgabe Trog
Out-String
und jetzt die Ausgabe sieht VIEL besser aus und Recht. Jedenfalls bekam ich eine Fehlermeldung.ConvertFrom-StringData : Datenzeile " Device is an Enclosure services device" weist nicht das "Name=Wert"-Format auf.
weiß nicht, wie man es loswerden und ich weiß nicht, was andere mitDevice is an Enclosure services device
string.sry für das Kommentar-spam - aber ich fand es heraus. seine einfache die Ersatz-Zeichenfolge, die Sie gesucht haben für "Gerät ein" und in dieser speziellen Ausgabe seiner "Gerät ist ein n". Nur angepasst -ersetzen und jetzt seine Arbeit finde. ty
InformationsquelleAutor mjolinor
versuchen Sie diese Variante:
InformationsquelleAutor saw-next