mac2unix mit Perl

9. Februar 2009 | Know-How | 3 Kommentare | geschrieben von Jan Theofel |

Unsere Webdesigner arbeiten arbeiten mit Apple Rechnern. Die Textdateien, also auch PHP-, HTML- und CSS-Dateien, die wir von ihnen bekommen haben daher einen anderen Zeilenumbruch als auf Linux-Systemen. Daher habe ich häufiger die Anforderung Mac-Dateien unter Linux zu konvertieren. Nicht auf jedem System steht dazu ein mac2unix-Kommando zur Verfügung.

Glücklicherweise ist Perl genau die richtige Sprache um so etwas schnell und effizient zu erledigen. Einfach die folgenden Perl-Zeilen als mac2unix auf dem Server im Pfad speichern:

#!/usr/bin/perl -i
while (<>)
{
  s/\r/\n/g;
  print $_ ;
}

Danach reicht folgender Aufruf um die Newlines der Mac-Dateien zu korrigieren:

mac2unix <file>

3 Kommentare zu “mac2unix mit Perl”

  1. Dentaku Sagt:

    Das müsste doch auch mit GNU recode gehen:

    recode MacRoman..lat1 [file]

  2. Mustermann Sagt:

    Dafür gleich Perl auszupacken, halte ich persönlich für viel zu umständlich und auch eine Ressourcen-Verschwendung. Warum nicht einfach dos2unix(1) verwenden (“dos2unix – DOS/MAC to UNIX text file format converter”) – das kümmert sich nämlich auch noch um mögliche Umlaute und Sonderzeichen, was das Perl-Script nicht tut.

    Und einfacher als das bloatige Perl-Script wäre übrigens
    alias mac2unix=’sed -e “s/\r/\n/g” -i ‘
    und anschließend einfach ein
    mac2unix
    was genau das gleiche macht, wenn man kein dos2unix zur Hand haben sollte – nur ohne den Perl-Overhead und ist damit viel universeller einsetzbar. Perl z.B. auf Embedded Systemen oder anderen exotischeren Umgebungen ist sehr unwahrscheinlich…

  3. Jan Theofel Sagt:

    Danke für eure Ergänzungen!

    @Dentaku:
    Ja, mit recode müsste es auch gehen. Glücklicherweise gibt es unter Linux immer mehrere Wege zum Ziel.

    @Mustermann:
    dos2unix ist auf der Maschine nicht drauf und aufgrund der Umstände auch nicht installierbar. Wir machen sehr viel mit Perl, daher war dieser Ansatz hier für mich der kürzeste zumal man hier noch recht flexibel Erweiterungen vornehmen könnte. Beispielsweise Umlaute als HTML-Entity codieren oder so was. Natürlich ist sed schlanker im Einsatz aber mir etwas zu puristisch. :-)

Ihre Meinung ist gefragt