Lesen von Dateien zeilenweise in Windows PowerShell
-
Verbesserung der Cmdlet-Syntax
Get-Content
-
Laden bestimmter Zeilen mit
switch
-
Verwenden der Klasse
[System.IO.File]
in PowerShell zum zeilenweisen Lesen von Dateien
In Windows PowerShell können wir das Cmdlet Get-Content
verwenden, um Dateien aus einer Datei zu lesen. Das Cmdlet lädt jedoch den gesamten Dateiinhalt auf einmal in den Arbeitsspeicher, was bei großen Dateien fehlschlägt oder einfriert.
Um dieses Problem zu lösen, können wir die Dateien Zeile für Zeile lesen, und dieser Artikel zeigt Ihnen, wie.
Bevor wir beginnen, ist es besser, wenn wir eine Beispieltextdatei mit mehreren Zeilen erstellen. Ich habe zum Beispiel eine file.txt
erstellt, die die folgenden Zeilen enthält.
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
Laut Microsoft ist ein regulärer Ausdruck ein Muster, das verwendet wird, um den Text abzugleichen. Es kann aus Literalzeichen, Operatoren und anderen Konstrukten bestehen. In diesem Artikel werden verschiedene Skripte ausprobiert, die eine Standardvariable namens Reguläre Ausdrücke verwenden, die mit $regex
bezeichnet wird.
Verbesserung der Cmdlet-Syntax Get-Content
Wir haben anfangs besprochen, dass das Cmdlet Get-Content
seine Fehler hat, wenn wir eine große Datei laden, da es den Inhalt der Datei auf einmal in den Speicher lädt. Wir können es jedoch verbessern, indem wir die Zeilen einzeln mit der Schleife foreach
laden.
Beispielcode:
foreach($line in Get-Content .\file.txt) {
if($line -match $regex){
Write-Output $line
}
}
Laden bestimmter Zeilen mit switch
Wir können die Variable $regex
verwenden, um bestimmte Zeilen in unsere Datei einzugeben, indem wir einen benutzerdefinierten $regex
-Wert erstellen und ihn in einer switch case-Funktion abgleichen.
Beispielcode:
$regex = '^t'
switch -regex -file file.txt {
$regex { "line is $_" }
}
Ausgabe:
line is two
line is three
line is ten
In diesem Beispiel haben wir einen benutzerdefinierten Wert von $regex
definiert, der nur übereinstimmt und Zeilen anzeigt, wenn er mit dem Zeichen t
beginnt.
Verwenden der Klasse [System.IO.File]
in PowerShell zum zeilenweisen Lesen von Dateien
Wenn Sie Zugriff auf die .NET-Bibliothek haben, können Sie die Klasse [System.IO.File]
verwenden, um Inhalte aus Ihrer Datei zu lesen. Es ist eine großartige Alternative zu Get-Content
, da Sie keine regulären Ausdrücke benötigen, um Dateien Zeile für Zeile zu verarbeiten.
Beispielcode:
foreach($line in [System.IO.File]::ReadLines("C:\yourpathhere\file.txt"))
{
Write-Output $line
}
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn