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>

24. Februar 2009 at 00:35
Das müsste doch auch mit GNU recode gehen:
recode MacRoman..lat1 [file]
24. Februar 2009 at 00:55
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…
24. Februar 2009 at 10:03
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. :-)