Alle Ersetzen-Methoden in PowerShell
-
Einführung in die
replace()
-Methode in PowerShell -
Verwendung der
replace()
-Methode in PowerShell - Entfernen von Zeichen in PowerShell
- Ersetzen mehrerer Instanzen in PowerShell
- Verwendung des Ersetzungsoperators in PowerShell
- Entfernen von Zeichen in PowerShell
- Ersetzen mehrerer Instanzen in PowerShell
- Ersetzen von Zeichenfolgen mit Regex in PowerShell
- Escape von Regex-Zeichen 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.
- Die Zeichenfolge, die gefunden werden soll.
- 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.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn