Perl vereinfacht UNIX-Administration

Die Vor-Ort-Bearbeitung erlaubt Perl die Veränderung einer Datei direkt an ihrem Speicherort. Die Ausgabe muss nicht erst an ein newfile gesendet werden, wo sie wahrscheinlich sowieso nur wieder in den Originalnamen umbenannt wird. Um diese alt/neu-Ersetzung an einer Datei mit dem Namen myfile auszuführen, verwendet man das folgende Kommando:


perl -i -p -e 's/old/new/g;' myfile

Die Option -i kann optionale Parameter annehmen, die anzeigen, dass Backup-Dateien erstellt werden sollen und welche Endungen diese haben sollen. Außerdem kann man eine ganze Liste von Dateien für die Bearbeitung durch den Befehl -e angeben, anstatt nur eine einzelne Datei als Argument einzugeben. Mit diesen beiden kleinen Tricks lässt sich also ein Befehl konstruieren, der ‚Suchen und Ersetzen‘ auf alle Dateien im Home-Verzeichnis anwendet und Backup-Dateien erstellt:


find ~ -type f |xargs perl -i.bak -p -e 's/old/new/g;'

Wird er auf diese Weise eingesetzt, liefert der Befehl find eine Liste aller Dateien in und unter dem Home-Verzeichnis. Der Befehl xargs nimmt Standard-Eingaben an, in diesem Fall die Liste der Dateien, und fügt sie an den unmittelbar darauffolgenden Befehl an. Wenn man eher wagemutig gestimmt ist, kann man das .bak auslassen und so die Erstellung von Backup-Dateien unterdrücken.

Dieses Kommando mit der Option -e wird auf jede Zeile angewandt – benötigt man jedoch eine feinere Unterteilung auf Wortebene, kann man die Auto-Split-Option -a hinzufügen. Gemeinsam mit -p weist die Option -a Perl an, jede Eingabezeile an den Leerstellen in den Array @F aufzubrechen. Das Ergebnis ist das gleiche, als würde Perls Split-Kommando auf die Zeile angewandt. Diese Option kann für ein leichteres Arbeiten mit in Spalten angeordneten Daten verwendet werden. Ein Script wie:


perl -i -n -a -e 'print @F[2,4];' mychart

sieht zwar etwas kompliziert aus, ist aber leicht zu analysieren, wenn man es Stück für Stück untersucht. Die Option -i bedeutet, dass wir die angegebene Datei, in diesem Fall mychart, direkt bearbeiten werden. Das -n gibt an, dass der Befehl -e auf jede Zeile angewandt wird, aber keine Ausgabe gedruckt werden soll. Das -a ist unsere Auto-Split-Option, und der Befehl -e druckt die miteinander verketteten Inhalte der dritten und fünften Spalte (die Nummerierung beginnt bei Null).

Mit einer letzten Option -F, lässt sich das Verhalten der Auto-Split-Option so steuern, dass die Zeilen an einer beliebigen Grenze, die sich mit einem gewöhnlichen Ausdrucksmittel spezifizieren lässt, in Array-Elemente aufgebrochen werden. Ein Kommando wie dieses:


perl -i -n -a -F, -e'print join ',', @F[1..$#F];' mytable

ließe sich also verwenden, um die erste Spalte einer Tabelle mit durch Komma getrennten Werten (CSV) zu löschen. Das -i steht wieder für die Vor-Ort-Bearbeitung. Die Option -n weist Perl an, jede Zeile zu verarbeiten und nichts zu drucken. Das -a schaltet den Auto-Split ein, und das -F sorgt dafür, dass die Aufspaltung an den Kommata vorgenommen wird. Das angegebene Kommando fügt alle Daten von der ersten bis zur letzten Spalte (ein Bereich, der die Spalte Null ausschließt) wieder mit Kommata zusammen und druckt die Ausgabe.

Wie meistens bei Perl kann die Syntax der Befehle etwas kompliziert werden, die Ergebnisse sind aber großartig. Je mehr man Kommandozeilen-Perl einsetzt, um so leichter wird es. Es wird nicht allzu viel Zeit vergehen, bis man feststellt, dass man die Kommandozeilen-Switches für cut vergessen hat. Eine gute Wahl!

Page: 1 2

ZDNet.de Redaktion

Recent Posts

April-Patches für Windows legen VPN-Verbindungen lahm

Betroffen sind Windows 10 und Windows 11. Laut Microsoft treten unter Umständen VPN-Verbindungsfehler auf. Eine…

1 Tag ago

AMD steigert Umsatz und Gewinn im ersten Quartal

Server-CPUs und Server-GPUs legen deutlich zu. Das Gaming-Segment schwächelt indes.

2 Tagen ago

Google stopft schwerwiegende Sicherheitslöcher in Chrome 124

Zwei Use-after-free-Bugs stecken in Picture In Picture und der WebGPU-Implementierung Dawn. Betroffen sind Chrome für…

3 Tagen ago

Studie: 91 Prozent der Ransomware-Opfer zahlen Lösegeld

Die durchschnittliche Lösegeldzahlung liegt bei 2,5 Millionen Dollar. Acht Prozent der Befragten zählten 2023 mehr…

3 Tagen ago

DMA: EU stuft auch Apples iPadOS als Gatekeeper ein

Eine neue Analyse der EU-Kommission sieht vor allem eine hohe Verbreitung von iPadOS bei Business-Nutzern.…

3 Tagen ago

Chips bescheren Samsung deutlichen Gewinnzuwachs

Das operative Ergebnis wächst um fast 6 Billionen Won auf 6,64 Billionen Won. Die Gewinne…

3 Tagen ago