joe2017
Goto Top

Powershell - Inhalt von Datei durchsuchen und Text nach Suchergebnis ausgeben

Hallo zusammen,

ich bin gerade am Verzweifeln und komm mit einem kleinen Powershell Script nicht weiter.
Ich habe eine Datei welche einen Text ohne Zeilenumbrüche enthält. In dieser Datei möchte ich nach einem Wort suchen und den folgenden Text bis zu einem bestimmten Zeichen ausgeben.
Anbei ein Beispiel meiner Datei:
blablabla           blablabla                                blablabla                 test1                                  a; e; g; d;a                                blablabla   blablabla          blablabla                      test2             g;z;t;u;1;2;3;v;a          blablabla                 blablabla                usw... 

Ich möchte jetzt also verschienden Inhalten suchen und möchte folgende Ausgabe erhalten:
Suche: test1
Ausgabe: a; e; g; d;a

Suche: test2
Ausgabe: g;z;t;u;1;2;3;v;a


Ich habe bereits meinen Inhalt meiner Datei in eine Variable geholt. Jetzt habe ich alles Mögliche mit Trim, Substring, IndexOf, SelectString usw. getestet. Jedoch komme ich hier irgendwie nicht weiter.
Hat zufällig jemand eine Idee wie ich das anstellen soll?

Über einen Tipp wäre ich sehr Dankbar. face-smile

Content-Key: 456916

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

Printed on: April 19, 2024 at 19:04 o'clock

Mitglied: 139920
Solution 139920 May 29, 2019 updated at 11:05:31 (UTC)
Goto Top
Regular Expressions ist wie immer dein Freund.
$text = Get-Content "C:\test.txt" -raw  
$search = Read-Host "Suchbegriff eingeben"  
$result = [regex]::Match($text,"(?is)$([regex]::Escape($search))\s+(.*?)\s{2,}")  
if($result.Success){
    write-host "Ergebnis: $($result.Groups[1].Value)"  
}else{
    write-host "Nicht gefunden!"  
}
Member: joe2017
joe2017 May 29, 2019 at 10:31:47 (UTC)
Goto Top
Vielen Dank schon mal für den Tipp. Die Funktion kenne ich leider nicht.
Nach einem ersten Test erhalte ich auch nur "Nicht gefunden!" zurrück.
Mitglied: 139920
Solution 139920 May 29, 2019 updated at 11:06:17 (UTC)
Goto Top
Funktioniert hier aber mit deinem Text (getestet)

Hier als Beweis mit Testdaten in PS Skript inkludiert:
$text = @"  
blablabla           blablabla                                blablabla                 test1                                  a; e; g; d;a                                blablabla   blablabla          blablabla                      test2             g;z;t;u;1;2;3;v;a          blablabla                 blablabla                usw... 
"@  
$search = Read-Host "Suchwort"  
$result = [regex]::Match($text,"(?is)$([regex]::Escape($search))\s+(.*?)\s{2,}")  
if($result.Success){
    write-host "Ergebnis: $($result.Groups[1].Value)"  
}else{
    write-host "Nicht gefunden!"  
}

Ergebnis:

screenshot

Ansonsten hast du uns keine exakten Ausgangsdaten der Datei geliefert. P.s. Ich gehe davon aus das da mindestens 2 Leerzeichen oder Tabs nach den gewünschten Daten stehen um eben zwischen zu extrahierenden Daten und dem nächsten Feld zu unterscheiden.

Edit: Korrektur
Member: joe2017
joe2017 May 29, 2019 at 11:54:39 (UTC)
Goto Top
Hallo Schellschrubber,

vielen Dank. Jetzt hat es funktioniert. Es lag wohl an meiner TXT Datei.
Suuuper! face-smile