You are here: Wissensbasis Web>PerlTipps>EinZeiler (2007-03-29)

Perl-Einzeiler

Inhalt:

Anmerkung: Beachte bitte das richtige Quoten auf der Kommandozeile. Unter Unix/Linux (d. h. Shells wie Bash, tcsh, ksh etc.) muss Text in einfache Anführungszeichen gesetzt werden, damit er nicht interpretiert wird, unter Windows in doppelte Anführungszeichen.

Beispiel:

Windows:
    perl -e "print $^O;"
Unix/Linux:
    perl -e 'print $^O;'

Einen Text in allen Dateien im aktuellen Verzeichnis ändern

    perl -p -i.bak -e 's/foo/bar/g' *
Diese Zeile ändert in allen Dateien im aktuellen Verzeichnis den Text foo in bar. Dabei wird von jeder Datei ein Backup mit der Endung .bak angelegt (dafuer ist das -i.bak da).

CR einfügen/entfernen

Konvertierung UNIX -> WINDOWS:
    perl -i -p -e 's/\cJ/\cM\cJ/' *
Konvertierung WINDOWS -> UNIX:
    perl -i -p -e 's/\cM//' *

Kaffeewecker

Wer setzt nicht mal beim Programmieren einen Kaffee auf und vergisst dann, ihn aus der Kaffeemaschine zu entfernen? Dafür kann man sich in Perl einen Wecker stellen:
    perl -e "sleep(300)=>print qq.\a.x3"
\a gibt ein Piepssignal aus

oder besser lesbar:
    perl -e "sleep(300); print qq(\a\a\a)"

Fingerprint (=MD5-Digest) einer Zeichenkette erstellen

perl -MDigest::MD5 -e "print Digest::MD5::md5_hex('zeichenkette')"

Fingerprint einer Datei erstellen

perl -MDigest::MD5 -le "open(FH, shift);binmode(FH);print Digest::MD5->new->addfile(*FH)->hexdigest" dateiname

Ganz einfache Ver- und Entschlüsselung von Dateien

perl -pe "$_ = ~$_" dateiname > ausgabedatei
durch ~ wird eine Zeichenkette binär negiert und somit unleserlich gemacht, kann aber durch dieselbe Operation wieder lesbar gemacht werden. Funktioniert leider teilweise nicht bei Binärdateien über Betriebssystemgrenzen hinweg

Filtern von Textdateien

perl -ne "print if /cmd\.exe/" access.log
gibt nur die Zeilen, in denen cmd.exe in der Datei access.log vorkommt, aus

Epochsekunden in ein lesbares Format umwandeln

perl -e "print ~~localtime(shift)" 1046880000

Titel einer Musik-CD von CDDB abfragen (Linux)

perl -MCDDB_get -le '%_=CDDB_get::get_cddb;print for @{ $_{track} }'

Datenstruktur anzeigen, die mit Storable serialisiert wurde

perl -MStorable -MData::Dumper -e "print Dumper retrieve shift" file.storable

Größe eines Bildes ausgeben

perl -MImage::Size -e "print Image::Size::attr_imgsize(shift)" xy.jpg

Zeilen ausgeben, die in fileA und fileB vorkommen

perl -ne 'print if ($seen{$_}.=@ARGV) =~ /10$/' fileA fileB

Zeilen ausgeben, die in einer Datei mehr als einmal vorkommen

perl -lne '$x{$_}++ and print' dateiname

Perl-Modulversion anzeigen

perl -MModul 'print $Modul::VERSION' 
(Anstelle von Modul den Namen des Moduls einsetzen, z.B. Tk; funktioniert bei den meisten Modulen)

Weitere Tipps von euch?

-- StraT - 13 Jan 2004

-- HaraldBongartz - 17 Mar 2003

-- RonaldGoeggel - 14 Oct 2003
Topic revision: 2007-03-29, ChristophBussenius
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um Rückmeldung.