Dos to unix Einzeiler

Hallo,

mein Problem ist eher akademischer Natur. Mir würden selber viele Workarounds einfallen. Aber vielleicht weiß hier ja jemand eine Lösung wie ich sie gern hätte.

Ich möchte unter Windows, innerhalb einer Batchdatei, Dateien von Windows (CRLF) nach Unix (LF) konvertieren. Mein Ansatz ( perl -i.bak -n -e „chomp; print $_,“\012" " bla.txt ) funktioniert nicht, weil Perl unter Windows die LF’s automatisch in CRLF’s umwandelt.
Beim Googeln hab ich die Funktion binmode gefunden. Die kommt in einem Einzeiler aber nicht in Frage weil man ihr einen Dateihandler übergeben muss.
Ein zusätzliches Skript schreiben würd ich nur ungern.

Hat jemand eine geniale Idee? ;o)

Torsten

Hallo,

Ich möchte unter Windows, innerhalb einer Batchdatei, Dateien
von Windows (CRLF) nach Unix (LF) konvertieren. Mein Ansatz (
perl -i.bak -n -e „chomp; print $_,“\012" " bla.txt )
funktioniert nicht, weil Perl unter Windows die LF’s
automatisch in CRLF’s umwandelt.
Beim Googeln hab ich die Funktion binmode gefunden. Die kommt
in einem Einzeiler aber nicht in Frage weil man ihr einen
Dateihandler übergeben muss.

perl -i.bak -e „binmode STDOUT;while(){print $_, qq(\012);}“

Ist zwar nicht mehr ganz so „Einzeiler“ wie vorher, passt aber immer noch auf 80 Zeichen :wink:

P.S. DOS-quoting sucks :wink:

Grüße,
Moritz

> perl -i.bak -e "binmode STDOUT;while(){print $\_,qq(\012\);}"

Ich hab das übrigens nicht getestet, keine Ahnung ob -i ohne -n funktioniert, und wie darin arbeitet. Ich habe einfach mal auf Perls angeborene Magie vertraut, k.A. ob das gerechtfertigt war.

Grüße,
Moritz

Das funktioniert leider nicht. „binmode STDOUT“ scheint keinen Effekt zu haben. Ein

perl -i.bak -e „binmode STDOUT; while(){ chomp; print $_;}“ …

schneidet alle Umbrüche weg. Wenn ich danach jedoch wieder ein \015 einfüge, wird es in ein CRLF umgewandelt. Egal ob ich binmode reinschreibe oder nicht. Evtl. ist binmode nur für das lesen gedacht???

Torsten

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo

Das funktioniert leider nicht. „binmode STDOUT“ scheint keinen
Effekt zu haben. Ein

perl -i.bak -e „binmode STDOUT; while(){ chomp; print
$_;}“ …

schneidet alle Umbrüche weg. Wenn ich danach jedoch wieder ein
\015 einfüge, wird es in ein CRLF umgewandelt. Egal ob ich
binmode reinschreibe oder nicht. Evtl. ist binmode nur für das
lesen gedacht???

Nein, Du kannst das so nicht bei ‚inplace edit‘ machen.

versuche mal in der Batch:

 perl -0777 -pe "binmode STDOUT; y/\r//" %1 \> %1.new

d.h., Du gehst über einen _extra_ handle für stdout
und erzeugst ein neues File (Unix mode) mit file.ext.new

Grüße

CMБ

Das hat funktioniert. Danke. Torsten

tr.exe -d „\015“ ohnecr.txt

tr.exe gibts hier
http://unxutils.sourceforge.net/