2016-06-06 15 views
0

Ich habe einen CSV-Export, wo ich ein paar Informationen bekommen. Von den 4 Zeilen unterhalb der Zeile 1 und 2 sind in Ordnung.Powershell ersetzen Text Wildcard

Zeilen 3 und 4 müssen die "2 x" rausgestrichen haben und auch bei Zeile 4 will ich nur den Namen henrietta nichts nach dem Komma (inklusive Komma) auslassen.

Id gerne einen Platzhalter anstelle der wie nachstehend unter Verwendung im,

Linda 
bobbyjoe 
2 x ash 
3 x Henrietta,suzyann,waynebruce,parkerpeter 

Derzeit

Nummer verwenden. was nur, ich habe einen Teil des Problems nicht gelöst Ich habe nicht online eine Antwort gefunden, die ich verstehe.

$filepath = "c:\mycsv.csv" 

$bad2 = "2 x " 
$good2 = `b 

$bad2 = "3 x " 
$good2 = `b 

get-content $filepath | % { $_ -replace $bad2 , $good2 } | % { $_ -replace $bad3 , $good3 } | set-content $saveloc\tidied-$date.csv 

Antwort

4

Kennen Sie Reguläre Ausdrücke? Sehen Sie das Tag Wiki für und haben einen Blick auf Reference - What does this regex mean?

Der -replace Operator in Powershell wird mit einem regex Ersatz, so dass es sehr einfach ist, zu ersetzen „(jede Ziffer) (Raum) (wörtliche x) (Raum)“:

$bad2 = '\d x ' 
# or 
$bad2 = '[0-9] x ' 

# better 
$bad2 = '^\d x ' 

get-content $filepath | % { $_ -replace $bad2, $good2 } 

Die bessere Version verankert die Übereinstimmung mit dem Anfang der Zeichenfolge; das ist es, was der Caret ^ tut.

Reguläre Ausdrücke sind sehr leistungsfähig und PowerShell bietet ausgezeichnete Unterstützung für sie.

+0

Noch nie davon gehört. Ich habe das implementiert und es funktioniert großartig. Danke vielmals – Confuseis