h41msh1c0r
Goto Top

Powershell Logfile Regex Textblöcke filtern

Aloa in die Runde,

Struktur runtergebrochen auf das Wichtige:

26.10.2023 - 05:00 : Der Dienst läuft
26.10.2023 - 14:23:51    <hier steht ein
großer textblock A>
27.10.2023 - 05:00 : Der Dienst läuft
38.10.2023 - 05:00 : Der Dienst läuft
29.10.2023 - 05:00 : Der Dienst läuft
30.10.2023 - 05:00 : Der Dienst läuft
31.10.2023 - 05:00 : Der Dienst läuft
01.11.2023 - 05:00 : Der Dienst läuft
01.11.2023 - 12:20:00     <hier steht ein
großer textblock B>
02.11.2023 - 05:00 : Der Dienst läuft

Jetzt zeilenweise das Log durchlaufen und in jeder Zeile in der "Der Dienst läuft" steht gleich weggelassen.
Ergebnis in einen langen Ergebnis String.

26.10.2023 - 14:23:51    <hier steht ein
großer textblock A>
01.11.2023 - 12:20:00    <hier steht ein
großer textblock B>

Nächster Schritt die Blöcke "26.10.2023 - 14:23:51" und "01.11.2023 - 12:20:00" finden.

Der Regextester sagt Regex passt.
\d{2}\.\d{2}\.\d{4} - \d{2}\:\d{2}\:\d{2}

Mit dem Regex auf den Codeblock drüber liefert mit -contains immer ein False.

Warum??

Grüße

Content-ID: 8336557307

Url: https://administrator.de/contentid/8336557307

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

8030021182
Lösung 8030021182 13.11.2023, aktualisiert am 14.11.2023 um 07:30:56 Uhr
Goto Top
Hallöle.
Mit dem Regex auf den Codeblock drüber liefert mit -contains immer ein False.
Was erwartest du? -contains macht keinen Regex Vergleich sondern einen Stringabgleich, du suchst -match

-Contains Description: Containment operator. Tells whether a collection of reference values includes a single test value.

-match and -notmatch use regular expressions to search for pattern in the left-hand side values.

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...

Example

https://tio.run/##lZDPTsMwDMbveQofkLpJNErSjT8RjAGTeAMuG0ileGtE1qDE1SrBno ...

Oder

https://tio.run/##ldDdSsMwFADg@zzFuRDaig1JtvkT3Dp14BvsQqtQ69lazFppTlnB7V ...

K.A welchen Teul du davon genau brauchst dazu ist deine Beschreibung etwas zu kurz gehalten ...

Gruß Katrin
H41mSh1C0R
Lösung H41mSh1C0R 14.11.2023 um 11:31:47 Uhr
Goto Top
Hi Katrin,

danke für die Hilfe beim Feuerlöschen. Also Regex --> "-match". ;)

Hier deine Lösung: (falls die tio links irgendwann nicht mehr gehen)

@'  
26.10.2023 - 05:00 : Der Dienst läuft
26.10.2023 - 14:23:51    <hier steht ein
großer textblock A>
27.10.2023 - 05:00 : Der Dienst läuft
38.10.2023 - 05:00 : Der Dienst läuft
29.10.2023 - 05:00 : Der Dienst läuft
30.10.2023 - 05:00 : Der Dienst läuft
31.10.2023 - 05:00 : Der Dienst läuft
01.11.2023 - 05:00 : Der Dienst läuft
01.11.2023 - 12:20:00     <hier steht ein
großer textblock B>
02.11.2023 - 05:00 : Der Dienst läuft
'@ | out-file test.txt  

$content = Get-Content test.txt -raw
[regex]::matches($content,'(?ism)^\d{2}\.\d{2}\.\d{4} - \d{2}:\d{2}:\d{2} .*?(?=^\d{2}\.\d{2}\.\d{4}|\Z)').Value  

Ergebnis:
26.10.2023 - 14:23:51    <hier steht ein
großer textblock A>

01.11.2023 - 12:20:00     <hier steht ein
großer textblock B>

Das ist das zwischenziel, hier filter ich mir den Eintrag raus der gebraucht wird.

Danke
VG