Strings ersetzen oder löschen mit PowerShell


    Tags: ,

    String-Operationen in PowerShellZu den häu­figen Auf­gaben beim Schreiben von Scripts gehört das Er­setzen von Zeichen­ketten, wobei meistens nur ein Teil des Strings ausge­tauscht werden soll. Power­Shell sieht dafür zwei Varianten vor, näm­lich replace als Methode und als Operator. Erstere lässt sich ein­facher nutzen, wogegen der Opera­tor mächtiger ist.

    Egal ob es um die Auswertung von Log-Files oder um die Umbenennung von Dateien geht, das Ersetzen von Zeichenketten ist eine häufig genutzte Operation.

    Replace-Methode

    Wenn man einen String durch eine konstante Zeichenkette ersetzen möchte, dann bietet sich die Methode replace() an, über die jedes String-Objekt verfügt. Als ersten Parameter übergibt man ihr die Zeichenkette, die ersetzt werden soll, und als zweiten jene, der an ihre Stelle treten soll:

    "Arbeiten mit PowerShell".Replace('Arbeiten', 'Spaß')

    Dieses Beispiel ersetzt "Arbeiten" durch "Spaß", und entsprechend ist das Ergebnis "Spaß mit PowerShell".

    Wie man hier erkennen kann, muss man die ursprüngliche Zeichenkette nicht in einer Variablen speichern, vielmehr ist die Methode direkt für den String verfügbar. Folgende Fleißaufgabe kann man sich also sparen:

    $s = "Arbeiten mit PowerShell"
    $s.Replace('Arbeiten','Spaß')

    Möchte man einen Teil-String löschen, dann ersetzt man diesen einfach durch die leere Zeichenkette:

    "Arbeiten mit PowerShell".Replace('Arbeiten mit ', '')

    Bei diesem Aufruf bliebe nur mehr "PowerShell" übrig.

    Beispielaufrufe der Replace()-Methode

    Möchte man mehrere Abschnitte in einem String ersetzen, dann kann man replace() in einem Ausdruck mehrfach hintereinander aufrufen:

    "Arbeiten mit PowerShell".Replace('Arbeiten','Spaß').Replace('PowerShell', VBScript')

    Das Ergebnis lautet in diesem Fall erwartungsgemäß "Spaß mit VBScript".

    Replace-Operator

    Wie gesehen, ist die Replace-Methode sehr einfach zu nutzen, aber sie unterstützt keine Wildcards oder reguläre Ausdrücke. Benötigt man diese, dann muss man zum Operator greifen.

    Anstatt des doppelten Aufrufs der Methode wie im letzten Beispiel oben könnte man sich mit einem regulären Ausdruck so behelfen:

    "Arbeiten mit PowerShell" `
    -Replace 'Arbeiten(\w+)PowerShell', 'Spaß $1 VBScript'

    Man beachte hier, dass der reguläre Ausdruck in einfachen Anführungszeichen stehen muss, weil sonst bereits die Shell $1 expandieren würde und die Regex-Engine nur mehr eine leere Zeichenkette zu sehen bekäme.

    Zur Verwendung von RegEx in PowerShell siehe auch diesen Beitrag.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links