Benutzer mit den meisten Antworten
RegEX ueber mehrere Zeilen

Frage
-
Hallo,
in dem obigen Thread geht es darum, an Hand eins bestimmten Inhaltes einer Zeile, die naechst folgende zu aendern, die allerdings mehrmals vorkommen kann.
Peter hat ja einen Loesungsvorschlag gemacht, ich dachte mir das sollte auch mit einem Regulaeren Ausdruck gehen
Ich definiere mir also die Variable $a
$a = "11111111 enabled: True 22222222 enabled: True 33333333 enabled: True 44444444 enabled: True 55555555 enabled: True 66666666 enabled: True"
Wenn in einer Zeile 44444444 steht soll in der folgenden zeile aus True False werden.
Dies kann ich z.B.: so
$a -replace '(44444444\nenabled: )True','$1False' # oder so machen. [regex]::Replace($a, '(44444444\nenabled: )True','$1False')
und erhalte jeweils:
11111111
enabled: True
22222222
enabled: True
33333333
enabled: True
44444444
enabled: False
55555555
enabled: True
66666666
enabled: TrueWenn ich nun aber die Zeilen als Text im Notepad erfasse und diese Textdatei in eine Variable einlese funktioniert der RegEX nicht mehr, was wohl daran liegt, das Get-content die Zeilen einzeln nach $b liefert, $b also am Ende ein Array ist, also wenn ich $a und $b ausgebe ist der Inhalt gleich. $a.count liefert nichts, $b.count liefert 12, also besteht der Text(4b) aus 12 Zeilen, $a ist wohl dann eine Zeile die ein paar Zeilenumbrueche enthaelt. Also muss das Problem was mit den Umbruechen zu tun haben.
Das sollte ja zu loesen sein, wenn man mit einem Null Delimiter beim Get-content arbeitet.
$b = get-content xx.txt -Delimiter '`0'
Jetz erhalte ich auch fuer $b.Count keinen Wert mehr, allerdings greift der RegEX
$b -replace '(44444444\nenabled: )True','$1False'
trotzdem nicht.Hat da einer eine Idee Tipp fuer mich!
Beste Gruesse
brima
- Bearbeitet brima Freitag, 18. Oktober 2013 14:10
Antworten
-
Ich bin kein Regex Experte...
Aus sich von Regex ist der ganze Text ja nur ein Byte Array und ALLE Zeichen sind erstmal gleich. Für Regex gibt es erstmal keine Zeilen oder Wörter...
Die Zeilen Vorschubzeichen fallen auch in die Klasse Whitespace (nichtdruckbare Zeichen).Deshalb kannst du diese z.B. mit \s* maskieren.$b = get-content D:\temp\regex.txt -Delimiter '`0' $b -match '44444444\s*enabled:\s*False' $matches[0]
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)- Als Antwort markiert brima Freitag, 18. Oktober 2013 17:35
Alle Antworten
-
Ich bin kein Regex Experte...
Aus sich von Regex ist der ganze Text ja nur ein Byte Array und ALLE Zeichen sind erstmal gleich. Für Regex gibt es erstmal keine Zeilen oder Wörter...
Die Zeilen Vorschubzeichen fallen auch in die Klasse Whitespace (nichtdruckbare Zeichen).Deshalb kannst du diese z.B. mit \s* maskieren.$b = get-content D:\temp\regex.txt -Delimiter '`0' $b -match '44444444\s*enabled:\s*False' $matches[0]
Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
Mein deutscher PowerShell Blog
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)- Als Antwort markiert brima Freitag, 18. Oktober 2013 17:35