Lesen von Dateien zeilenweise in Windows PowerShell

  1. Verbesserung der Cmdlet-Syntax Get-Content
  2. Laden bestimmter Zeilen mit switch
  3. Verwenden der Klasse [System.IO.File] in PowerShell zum zeilenweisen Lesen von Dateien
Lesen von Dateien zeilenweise in Windows PowerShell

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 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

Verwandter Artikel - PowerShell File