Wie man einen Text in einer Datei mit PowerShell ersetzt

  1. Verwenden Sie Get-Content und Set-Content, um jede Instanz einer Zeichenfolge in einer Datei mit PowerShell zu ersetzen
  2. Verwenden Sie die File-Klasse, um jede Instanz einer Zeichenfolge in einer Datei mit PowerShell zu ersetzen
  3. Ersetzen Sie jede Instanz einer Zeichenfolge in mehreren Dateien mit PowerShell
  4. Fazit
Wie man einen Text in einer Datei mit PowerShell ersetzt

PowerShell ist ein leistungsstarkes Tool zur Verwaltung von Dateien und Ordnern. Es ermöglicht Ihnen, Dateien und Ordner im System zu erstellen, zu kopieren, zu löschen, zu verschieben, umzubenennen und anzuzeigen.

Dieses Tutorial stellt verschiedene Methoden vor, um jede Zeichenfolgeninstanz in einer Datei mit PowerShell zu ersetzen.

Verwenden Sie Get-Content und Set-Content, um jede Instanz einer Zeichenfolge in einer Datei mit PowerShell zu ersetzen

Der Befehl 'Get-Content' ruft den Inhalt eines Elements im angegebenen Pfad ab, wie den Text in einer Datei. Das Cmdlet 'Set-Content' ist ein Zeichenfolgenverarbeitungswerkzeug, mit dem Sie neuen Inhalt zu einer Datei hinzufügen oder vorhandenen Inhalt ersetzen können.

Sie können das Cmdlet Get-Content und Set-Content verwenden, um jede Zeichenfolgeninstanz in einer Datei zu ersetzen.

Syntax:

(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'

In der Syntax ersetzen wir 'OldString' durch die Zeichenfolge, die wir ersetzen möchten, und 'NewString' durch die Zeichenfolge, die wir an deren Stelle setzen möchten. Stellen Sie sicher, dass Sie 'Path\to\Your\File.txt' durch den tatsächlichen Pfad zu Ihrer Datei ersetzen.

Lassen Sie uns ein Beispiel geben. Wir haben eine Textdatei (test.txt) im Verzeichnis (C:\New) mit folgendem Inhalt.

Get-Content C:\New\test.txt

Ausgabe:

Welcome to Linux tutorials.
Linux is free.
Linux is powerful.

Jetzt ersetzen wir jede Instanz der Zeichenfolge 'Linux' durch 'PowerShell' in einer Datei test.txt mit Hilfe des Parameters -Replace. Die Klammern () sind um den Get-Content erforderlich.

(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt

Überprüfen Sie dann den Inhalt einer Datei test.txt, um die Änderungen zu verifizieren.

Get-Content C:\New\test.txt

Wie Sie sehen können, wurde Linux erfolgreich durch PowerShell ersetzt.

Ausgabe:

Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.

Diese Methode verwendet ein Zeichenfolgenarray, um Zeichenfolgen in einer Datei zu finden und zu ersetzen, da das Cmdlet Get-Content ein Array zurückgibt. Es ist einfacher, Zeichenfolgen zu ersetzen, wenn Get-Content eine einzelne Zeichenfolge zurückgibt.

Wir können den Parameter -Raw wie unten gezeigt verwenden. Der Parameter -Raw wird verwendet, um sicherzustellen, dass der Inhalt von 'C:\New\test.txt' als eine einzelne Zeichenfolge gelesen wird, wodurch eine effiziente Ersetzung von 'Linux' durch 'PowerShell' im gesamten Dateiinhalt ermöglicht wird.

(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt

In diesem Code lesen wir den Inhalt einer Datei, die sich unter 'C:\New\test.txt' befindet, als eine einzelne Zeichenfolge. Dann verwenden wir den Operator -Replace, um alle Instanzen von 'Linux' durch 'PowerShell' innerhalb dieser Zeichenfolge zu finden und zu ersetzen.

Schließlich speichern wir den modifizierten Inhalt zurück in die gleiche Datei, um sie effektiv mit dem neuen Text zu aktualisieren. Dieser Code ist eine unkomplizierte Möglichkeit, Textersetzungen in einer Datei mit PowerShell durchzuführen.

Verwenden Sie die File-Klasse, um jede Instanz einer Zeichenfolge in einer Datei mit PowerShell zu ersetzen

Die File-Klasse bietet statische Methoden für häufige Operationen wie das Erstellen, Kopieren, Verschieben, Öffnen, Löschen und Anhängen an eine einzelne Datei. Verwenden Sie die Methode Replace() der File-Klasse, um den Inhalt einer bestimmten Datei zu ersetzen.

Syntax:

$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)

Parameter:

  • "FilePath": Dies sollte durch den tatsächlichen Dateipfad ersetzt werden.
  • "OldString": Dies ist die Zeichenfolge, die Sie ersetzen möchten.
  • "NewString": Dies ist die Zeichenfolge, durch die Sie sie ersetzen möchten.

Die Methode ReadAllText() öffnet eine Textdatei, liest allen Text in dieser Datei und schließt dann die Datei.

Die Methode WriteAllText() erstellt eine neue Datei, schreibt die spezifische Zeichenfolge in die Datei und schließt die Datei. Sie wird überschrieben, wenn die Zieldatei bereits an dem Speicherort existiert.

Lassen Sie uns ein Beispiel geben. Wir haben eine Textdatei (python.txt) im Verzeichnis (C:\New) mit folgendem Inhalt.

Get-Content C:\New\python.txt

Ausgabe:

Find the best Python tutorials and learn Python easily from DelftStack.

Jetzt ersetzen wir jede Instanz einer Zeichenfolge in einer Datei mithilfe der Methode der File-Klasse.

$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)

Im obigen Code beginnen wir damit, eine Variable namens $string zu erstellen, die den modifizierten Inhalt der Datei 'C:\New\python.txt' speichern wird, nachdem wir die Textersetzung durchgeführt haben. Mit [System.IO.File]::ReadAllText("C:\New\python.txt") lesen wir den gesamten Inhalt der Datei und speichern ihn in $string.

Im nächsten Schritt verwenden wir die Methode Replace(), um alle Instanzen von "Python" im Inhalt zu finden und sie durch "JavaScript" zu ersetzen, wodurch der Text effektiv aktualisiert wird. Schließlich verwenden wir [System.IO.File]::WriteAllText("C:\New\python.txt", $string), um den modifizierten Inhalt zurück in die gleiche Datei zu schreiben, wobei der ursprüngliche Text überschrieben und unsere Änderungen beibehalten werden.

Überprüfen Sie die vorgenommenen Änderungen in C:\New\python.txt.

Get-Content C:\New\python.txt

Ausgabe:

Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.

In der Ausgabe können wir sehen, dass "Python" durch das Wort "JavaScript" ersetzt wurde.

Ersetzen Sie jede Instanz einer Zeichenfolge in mehreren Dateien mit PowerShell

Die obigen Methoden ersetzen eine Zeichenfolge in einer einzelnen Datei. Manchmal müssen Sie möglicherweise dieselbe Zeichenfolge in mehreren Dateien ersetzen.

In diesem Fall können Sie den folgenden Befehl verwenden, um jede Instanz einer bestimmten Zeichenfolge in mehreren Dateien zu ersetzen.

Get-ChildItem 'C:\New\*.txt' | foreach {
     (Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}

Im obigen Code beginnen wir damit, Get-ChildItem zu verwenden, um eine Liste von '.txt'-Dateien im Verzeichnis 'C:\New' zu sammeln. Das Sternchen * Platzhalter spezifiziert alle Dateien mit der Dateinamenerweiterung .txt.

Dann durchlaufen wir jede Datei, lesen ihren Inhalt mit Get-Content und wenden eine Ersetzungsoperation an, wobei wir 'weekly' in 'monthly' ändern, unter Verwendung des Operators -Replace. Der modifizierte Inhalt wird dann mit Set-Content in die gleiche Datei zurückgeschrieben.

Dieser Prozess wiederholt sich für jede Datei im Verzeichnis und ersetzt effizient 'weekly' durch 'monthly' in mehreren Dateien.

Wir können auch den Parameter -Recurse verwenden, um eine Zeichenfolge in Dateien im angegebenen Verzeichnis und dessen Unterverzeichnissen zu ersetzen.

Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
     (Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}

In diesem Code beginnen wir damit, Get-ChildItem zu verwenden, um eine Liste von '.txt'-Dateien innerhalb von 'C:\New' und seinen Unterverzeichnissen zusammenzustellen. Die Option -Recurse stellt sicher, dass wir diese Dateien nicht nur im angegebenen Verzeichnis, sondern auch in seinen Unterverzeichnissen suchen.

Wir verwenden dann ein Paar von ForEach-Schleifen, um auf den Inhalt jeder Datei zuzugreifen. Innerhalb der inneren Schleife verwenden wir den Operator -Replace, um 'weekly' im Text durch 'monthly' zu ersetzen.

Schließlich speichern wir den angepassten Inhalt zurück in die gleiche Datei. Dieser Prozess läuft durch alle Dateien in 'C:\New' und deren Unterordnern und ermöglicht es uns, effektiv 'weekly' durch 'monthly' in zahlreichen Dateien und verschachtelten Verzeichnissen zu ersetzen.

Fazit

In diesem Artikel haben wir verschiedene Möglichkeiten untersucht, um Zeichenfolgen in einer einzelnen Datei mithilfe der Cmdlets Get-Content und Set-Content zu ersetzen, wobei sowohl eine grundlegende als auch eine effizientere Methode mit dem Parameter -Raw angeboten wird. Anschließend haben wir die Möglichkeiten der File-Klasse genutzt, um Text innerhalb von Dateien zu ersetzen und eine ausgefeiltere Technik zu demonstrieren.

Darüber hinaus haben wir unser Wissen erweitert, indem wir Text in mehreren Dateien in einem Verzeichnis und dessen Unterverzeichnissen ersetzt haben. Diese Methoden erleichtern es den Menschen, Texte in ihren Dateien zu bearbeiten und zeigen, wie nützlich PowerShell für solche Aufgaben sein kann.

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

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

Verwandter Artikel - PowerShell String