Get-Content: Dateien einlesen mit Powershell

Den Inhalt einer Textdatei einzulesen und zu filtern gehört zu den Standardaufgaben in der Systemverwaltung, sei es innerhalb von Scripts oder auf der Kommandozeile. Auch hier hat Powershell mit dem Cmdlet Get-Content mehr zu bieten als Uralt-Kommandos wie type, die den Inhalt einer Datei als Zeichenkette erfassen und bloß an einen anderen Befehl oder ein Ausgabegerät weitergeben können.

Wie die folgenden Beispiele zeigen, setzt Get-Content das objekt-orientierte Konzept der Powershell sogar mit unstrukturierten Informationen wie dem Inhalt einer Textdatei um. Bei Einlesen erzeugt es ein Array von String-Objekten, wobei jedes davon eine Zeile des Inhalts repräsentiert. Aufgrund dieser internen Darstellung lassen sich die für Strings vorhandenen Methoden und Eigenschaften nutzen, um die eingelesene Datei weiterzuverarbeiten.

Quelldateien auswählen

Die einfachste Anwendung von Get-Content besteht darin, dass man ihr als Parameter den Namen einer oder mehrerer Dateien (bzw. ein Muster unter Verwendung von Wildcards) übergibt, so dass es anschließend den eingelesenen Inhalt auf stdout ausgibt:

Get-Content -path tt.cmd

Diese simple Form lässt sich durch die Parameter -include sowie -exclude so spezifizieren, dass bei Verwendung von Wildcards bestimmte Dateien ein- oder ausgeschlossen werden.

head- und tail-Kommandos simulieren

Eine Verwendung von Get-Content kann darin bestehen, die von Unix bekannten Befehle head und tail zu simulieren, die bekanntlich eine bestimmte Zahl an Zeilen vom Anfang oder vom Ende der Datei ausgeben. Die ersten n Zeilen lassen sich mit Hilfe des Parameters -TotalCount ausfiltern. Da Get-Content aber ein Array aus Strings erzeugt, kann man sich diese Tatsache zunutze machen, um flexibel auf eine beliebige Zahl von Zeilen an jeder Position zuzugreifen:

(Get-Content -path Desktop\* -include *.php)[0 .. 9]

gibt im Stil von head die ersten 10 Zeilen aus,

(Get-Content -path Desktop\* -include *.php)[-1 .. -10]

dagegen wie tail die letzten 10.

Zeilen zählen

Möchte man wissen, wie viele Zeilen eine Datei enthält, dann kann man dies über die length-Eigenschaft des Arrays ermitteln:

(Get-Content -path tt.cmd).length

Möchte man die Zeilen mit Nummern ausgeben, dann kann man diese über die Eigenschaft ReadCount abrufen:

Get-Content -path tt.cmd | foreach{ $_.insert(0, $_.ReadCount)}

Dateien sortieren

Eine häufige Operation besteht im Sortieren der Zeilen, die aus seiner Textdatei ausgelesen wurden. Dies lässt sich einfach mittels sort-object (Alias sort) erledigen, im folgenden Beispiel absteigend, wobei der sortierte Inhalt wieder in die Ursprungsdatei zurückgeschrieben wird:

Get-Content -path tt.cmd | sort -Descending | set-content -path tt.cmd

Der weiteren Manipulation von eingelesenen Dateiinhalten sind beinahe keine Grenzen gesetzt, da man auf sie etwa alle Methoden von String-Objekten anwenden kann, beispielsweise replace, um Zeichenketten zu ersetzen.

Keine Kommentare

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht angezeigt. Wenn mit Ihrer angegebenen Mail-Adresse ein Gravatar verknüpft ist, dann wird dieser neben Ihrem Kommentar eingeblendet.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Zeilen und Absätze werden automatisch erzeugt.
  • Mail-Adressen werden im Seitenquelltext unkenntlich gemacht, um sie vor dem automatischen Erfassen durch Spammer zu schützen.

Weitere Informationen über Formatierungsoptionen