ADMIN-Tipp: Perl Oneliner

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Perl taugt zwar selbst für größere Projekte, ist aber auch am anderen Ende stark: Mit Einzeilern lassen sich viele Alltagsprobleme elegant lösen. Drei Beispiele.

Zuweilen möchte man nachlaufenden Whitespace aus Textdateien entfernen. Zuerst kommt einem vielleicht eine Lösung in den Sinn wie

perl -pe 's/\s*$//' testfile

Diese Lösung hat aber einen entscheidenden Nachteil, der schon beim ersten praktischen Versuch offensichtlich wird. Auch das Zeilenendezeichen "\n" zählt zum Whitespace und wird so mit entfernt, in der Ausgabe wird alles in eine einzige Zeile platziert. Perl kennt aber einen sehr effizienten Ausweg:

perl -lpe 's/\s*$//' testfile

Die Option -l entfernt das Newline, bevor die Zeile dem regulären Ausdruck übergeben wird, und fügt es hinterher wieder hinzu. In diesem Beispiel gibt das Script das übergebene Testfile auf Stdout wieder aus. Manchmal möchte man die Änderungen aber direkt in der zu editierenden Datei vornehmen (in place), sich aber das Original sicherheitshalber doch noch aufheben. Auch das kann Perl mit einem Kommandozeilenswitch:

perl -i.bak -ne 'print unless /^#/' script.sh

Das entfernt dank -i alle Kommentarzeilen, die mit einem Doppelkreuz beginnen, direkt in der Skriptdatei und sichert das Original mit der Endung .bak . Will man Zeilen an bestimmten Trennzeichen in Felder aufsplitten, denkt man vielleicht zuerst an awk, weil das dessen Default-Operationsmodus ist. Aber Perl kann das mit dem Kommandozeilenswitch -a genauso und mit -F kann man sogar das Trennzeichen definieren.

perl -F: -lane 'print $F[0]' /etc/passwd

Das gibt eine Liste der Benutzerkennungen aus, die sich im ersten Feld der Doppelpunkt-separierten Zeilen des passwd-Files finden.

29.10.2013

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023