Powershell Frage

back4ever

SlotBauer
ID: 10467
L
20 April 2006
28.195
1.247
Hi,

Große Datei 5Mio Zeilen
Alle Wörter in "'" müssen kopiert werden

Voraussetzung:
Das Wort darf nicht als mehr 25 Zeichen beinhalten !
d.h alle längeren in 'Wort' müssen ignoriert werden

habe es so versucht:
Code:
Get-Content edit1.txt | Select-String -Pattern '"([^"]{0,25})"' -AllMatches | % { $.Matches } | % { $.Groups[1].Value } | Out-File -FilePath edit2.txt

bekomme keine fehlermeldung edit2.txt wird erstellt, allerdings bleibt die "edit2" textdatei leer :/
Pfad wurde richtig angegeben weis nicht mehr woran es liegen könnte
wäre sehr dankbar wenn mir wer helfen könnte.


Danke
 
Wenn deine Wörter durch Leerzeichen innerhalb der Anführungszeichen unterbrochen werden, könnte dein Regex diese nicht korrekt erfassen. Passe das Regex an, um auch Leerzeichen innerhalb der Anführungzeichen zu erlauben:

PowerShell
Get-Content edit1.txt -Raw | Select-String -Pattern '"[^"]{0,25}"' -AllMatches | % { $_.Mat
 
Dein Problem liegt am Pattern: Du suchst nach " (Doppelte Anführungszeichen), aber du erwähnst ' (einfache Anführungszeichen). Außerdem kann PowerShell bei großen Dateien Probleme mit Get-Content haben. Korrektur:



Get-Content edit1.txt -ReadCount 1000 |
Select-String -Pattern "'([^']{1,25})'" -AllMatches |
ForEach-Object { $_.Matches } |
ForEach-Object { $_.Groups[1].Value } |
Out-File edit2.txt



  • Pattern '([^']{1,25})' sucht nach einfachen Anführungszeichen.
  • -ReadCount 1000 verbessert die Performance bei großen Dateien.