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-ID: 456916

Url: https://administrator.de/forum/powershell-inhalt-von-datei-durchsuchen-und-text-nach-suchergebnis-ausgeben-456916.html

Ausgedruckt am: 07.04.2025 um 02:04 Uhr

139920
Lösung 139920 29.05.2019 aktualisiert um 13:05:31 Uhr
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!"  
}
joe2017
joe2017 29.05.2019 um 12:31:47 Uhr
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.
139920
Lösung 139920 29.05.2019 aktualisiert um 13:06:17 Uhr
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
joe2017
joe2017 29.05.2019 um 13:54:39 Uhr
Goto Top
Hallo Schellschrubber,

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