Alle Ersetzen-Methoden in PowerShell

  1. Einführung in die replace()-Methode in PowerShell
  2. Verwendung der replace()-Methode in PowerShell
  3. Entfernen von Zeichen in PowerShell
  4. Ersetzen mehrerer Instanzen in PowerShell
  5. Verwendung des Ersetzungsoperators in PowerShell
  6. Entfernen von Zeichen in PowerShell
  7. Ersetzen mehrerer Instanzen in PowerShell
  8. Ersetzen von Zeichenfolgen mit Regex in PowerShell
  9. Escape von Regex-Zeichen in PowerShell
Alle Ersetzen-Methoden in PowerShell

Windows PowerShell kann mit Texten und Zeichenfolgen wie viele andere Sprachen arbeiten. Eines dieser wertvollen Merkmale ist die Verwendung von Windows PowerShell zum Ersetzen von Zeichen, Zeichenfolgen oder sogar Texten in Dateien.

Dieser Artikel wird das Ersetzen oder Löschen von Zeichen, Texten und Wörtern mithilfe verschiedener PowerShell-Ersetzmethode besprechen.

Einführung in die replace()-Methode in PowerShell

Wir können Windows PowerShell verwenden, um Zeichen in Zeichenfolgen zu ersetzen. Zum Beispiel erstellen wir eine PowerShell-Variable mit einem Datentyp, der eine Zeichenfolge ist, die wir in diesem Artikel verwenden werden.

$string = 'hello, world'

Wir möchten das Wort hello innerhalb der Zeichenfolge durch das Wort hi ersetzen, damit die $string-Variable den Wert hi, world hat.

Um dies auszuführen, muss Windows PowerShell herausfinden, wo der spezifische Teil des Textes zu finden ist, und sobald er gefunden ist, ersetzt es diesen Teil des Textes durch einen benutzerspezifizierten Wert.

Verwendung der replace()-Methode in PowerShell

Eine der bequemsten Möglichkeiten, Zeichenfolgen in Windows PowerShell zu ersetzen, ist die Verwendung der replace()-Methode. Die replace()-Methode akzeptiert zwei Argumente.

  1. Die Zeichenfolge, die gefunden werden soll.
  2. Die Zeichenfolge, die den gefundenen Text ersetzt.

Wie wir unten sehen können, lokalisiert Windows PowerShell das Wort hello und ersetzt es durch die Zeichenfolge hi. Die Methode gibt das Endergebnis hi, world zurück.

Lassen Sie uns unsere zuvor erstellte $string-Variable als Beispiel verwenden.

Code:

$string.replace('hello', 'hi')

Ausgabe:

hi, world

Wir können die replace()-Methode auf jedes Zeichen anwenden, um eine beliebige Literalzeichenfolge durch eine andere zu ersetzen. Die replace()-Methode gibt nichts zurück, wenn die zu ersetzende Zeichenfolge nicht gefunden wird.

Darüber hinaus müssen wir keinen String einer Variable zuweisen, um Text in einer Zeichenfolge zu ersetzen. Stattdessen können wir die replace()-Methode direkt auf der Zeichenfolge aufrufen.

Code:

'hello world'.replace('hello', 'hi')

Entfernen von Zeichen in PowerShell

Vielleicht müssen wir Zeichen in einem Text aus einer anderen Zeichenfolge entfernen, anstatt sie durch etwas anderes zu ersetzen. Wir können das auch tun, indem wir eine leere Zeichenfolge angeben.

Code:

$string.replace('hello', '')

Ausgabe:

, world

Ersetzen mehrerer Instanzen in PowerShell

Da die replace()-Methode ein Ergebnis mit einem Zeichenfolgendatentyp zurückgibt, können wir, um eine weitere Instanz zu ersetzen, einen weiteren replace()-Methodenaufruf am Ende anhängen. Windows PowerShell ruft dann die replace()-Methode auf dem tatsächlichen Ausgabeergebnis auf.

Code:

$string.replace('hello', '').replace('world', 'earth')

Ausgabe:

, earth

Wir können so viele replace()-Methodenaufrufe miteinander verketten, wie nötig, aber wir sollten in Betracht ziehen, den Ersetzungsoperator zu verwenden, wenn wir mehrere Zeichenfolgen ersetzen müssen.

Verwendung des Ersetzungsoperators in PowerShell

Wir können auch den Ersetzungsoperator von Windows PowerShell verwenden, um einen Text zu ersetzen. Der Ersetzungsoperator ist ähnlich wie die Methode, bei der wir eine Zeichenfolge angeben, um sie zu finden und zu ersetzen.

Aber er hat einen erheblichen Vorteil: die Verwendung von regulären Ausdrücken (Regex), um übereinstimmende Zeichenfolgen zu finden. Mit dem vorherigen Beispiel können wir den Ersetzungsoperator verwenden, um hello durch hi zu ersetzen, ähnlich wie unten gezeigt.

Code:

$string -replace 'hello', 'hi'

Ausgabe:

hi, world

Entfernen von Zeichen in PowerShell

Wie bei der replace()-Methode können wir auch Zeichen aus einer Zeichenfolge mithilfe des Ersetzungsoperators löschen. Im Gegensatz zur replace()-Methode können wir die Zeichenfolge auch vollständig als Argument ausschließen, durch das ersetzt werden soll, und Sie werden den gleichen Effekt feststellen.

Code:

$string -replace 'hello', ''
$string -replace 'hello'

Ausgabe:

, world
, world

Ersetzen mehrerer Instanzen in PowerShell

Wir können auch die Verwendung des Ersetzungsoperators miteinander verketten.

Code:

$string -replace 'hello', 'hi' -replace 'world', 'earth'

Ausgabe:

hi, earth

Ersetzen von Zeichenfolgen mit Regex in PowerShell

Das Ersetzen von Zeichenfolgen in PowerShell mit der replace()-Methode ist begrenzt. Wir sind nur darauf beschränkt, Literalzeichenfolgen zu verwenden.

Wir können keine Platzhalter oder Regex verwenden. Wenn Sie zwischenzeitlich oder fortgeschritten arbeiten, sollten wir den Ersetzungsoperator verwenden.

Wir haben ein Skript, das eine Zeichenfolge mit einer Variablen erstellt. Wir möchten die Zeichenfolge auf goodbye, world ändern, unabhängig vom Wert.

Es würde helfen, hello, world und hi, world in goodbye, world zu transformieren. Wir müssen einen regulären Ausdruck verwenden und fast jedes spezifische Muster im Text mit Regex abgleichen, um dies zu erreichen.

In diesem Beispiel können wir den Ausdruck hello|hi verwenden, um beide erforderlichen Zeichenfolgen mithilfe des Regex-„oder“-Operators oder des Pipe-Zeichens (|) abzugleichen.

Code:

'hello, world' -replace 'hello|hi', 'goodbye'
'hi, world' -replace 'hello|hi', 'goodbye'

Ausgabe:

goodbye, world
goodbye, world

Sobald wir gelernt haben, wie man Regex verwendet, um Zeichenfolgen zu finden, können wir PowerShell verwenden, um Wildcard-Zeichenfolgen zu ersetzen, die einem beliebigen Muster entsprechen.

Escape von Regex-Zeichen in PowerShell

Im obigen Regex-Beispiel enthielt die Zeichenfolge, in der gesucht werden sollte, keine speziellen Regex-Zeichen. Die reguläre Ausdruckssprache verwendet jedoch bestimmte Zeichen, die nicht buchstäblich wie die meisten Buchstaben und Zahlen interpretiert werden.

Zum Beispiel müssen wir möglicherweise Text in einer Zeichenfolge ersetzen. Diese Zeichenfolge enthält ein paar spezielle Regex-Zeichen wie eine Klammer und ein Fragezeichen.

Wir versuchen dann, die Zeichenfolge [hello] mit einem goodbye zu ersetzen.

Code:

PS> '[hello], world' -replace '[hello]', 'goodbye'

Ausgabe:

[goodbyegoodbyegoodbyegoodbyegoodbye], wgoodbyergoodbyed

Das ist nicht das, was wir beabsichtigt haben. Dieses Szenario tritt auf, wenn wir spezielle Regex-Zeichen innerhalb der zu findenden Zeichenfolge verwenden ([hello]).

Um dieses Problem zu vermeiden, können wir entweder diese speziellen Zeichen durch Voranstellen eines Backslash vor jedes Zeichen escapen oder die Methode Escape() verwenden. Unten können wir den Effekt sehen, jedes spezielle Zeichen mit einem Backslash zu escapen.

Code:

'[hello], world' -replace '\[hello\]', 'goodbye'

Ausgabe:

goodbye, world

Alternativ können wir die Escape()-Methode des Regex-Typs verwenden, um alle speziellen Zeichen automatisch zu entfernen.

Code:

'[hello], world' -replace ([regex]::Escape('[hello]')), 'goodbye'

Ausgabe:

goodbye, world

Wir sollten die Methode Escape() verwenden, da sie alle speziellen Zeichen escaped und wir uns nicht daran erinnern müssen.

Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn