2012-09-20 1 views

Antwort

18
grep -URl ^M . | xargs fromdos 

grep bekommt man eine Liste aller Dateien im aktuellen Verzeichnis, das DOS-Zeilenenden haben.

-U macht grep Zeilenenden betrachten, anstatt sie weg von Strippen von Standard

-R macht es rekursive

-l es Liste macht nur die Dateinamen und nicht die passenden Zeilen

dann sind Sie Rohrleitungen diese Liste in den Konverter-Befehl (das ist fromdos auf Ubuntu, dos2unix, woher ich komme).

HINWEIS: geben Sie nicht tatsächlich ^M ein. Stattdessen müssen Sie <Ctrl-V> und dann <Ctrl-M> drücken, um das Zeichen ^M einzufügen und grep zu verstehen, was Sie vorhaben. Oder, Sie könnten $'\r' anstelle von ^M eingeben (aber ich denke, das funktioniert möglicherweise nur für Bash ...).

+1

grep -URl^M. | xargs fromdos? – Dalinaum

+5

Das Ubuntu-Paket zur Installation heißt "Tofrodos". – Apalala

+0

Auf tcsh, und wahrscheinlich auch auf csh, können Sie den gleichen Effekt mit 'grep -URl" \ r "erhalten. | xargs fromdos'. – bdesham

0

Sie den Befehl verwenden können:

dos2ux file.in>file.out or: 

in Perl:

perl -pi -e 's/\r//g' your_file 

alternativ können Sie tun:

  • offen in vi
  • Go-Modus
  • Typ :%s/[ctrl-V][CTRL-M]//g
0

Hinweis, wenn Sie Multi-Byte-Dateien sind konvertieren Sie nehmen müssen besondere Vorsicht, und sollte wahrscheinlich versuchen, die korrekten iconv oder recode von codierenden Spezifikationen zu verwenden.

Wenn es sich um eine einfache ASCII-Datei handelt, funktionieren beide der folgenden Methoden.

Das Programm flip, in Debian das Paket wird auch flip genannt, kann mit Zeilenenden umgehen. Aus dem Handbuch:

When asked to convert a file to the same format that it already 
has, flip causes no change to the file. Thus to convert all 
files to **IX format you can type 

flip -u * 

and all files will end up right, regardless of whether they were 
in MS-DOS or in **IX format to begin with. This also works in the 
opposite direction. 

Oder könnten Sie GNU Recode:

< /etc/passwd recode ..pc | tee a b > /dev/null 
file a b 

Ausgang:

a: ASCII text, with CRLF line terminators 
b: ASCII text, with CRLF line terminators 

Konvertieren in die Unix-Zeilenenden:

recode pc.. a b 
file a b 

Ausgang:

a: ASCII text 
b: ASCII text 

Recode abkürzt dos Zeilenende als pc, so die Logik mit pc.. wird: vom PC-Format auf den Standard konvertieren, die latin1 ist mit Unix-Zeilenenden.

3

auf Ubuntu verwenden Sie das fromdos Dienstprogramm

fromdos test.txt 

Das obige Beispiel würde eine MS-DOS oder Microsoft Windows-Datei oder eine andere Datei mit verschiedenen Zeilenseparatoren nehmen und formatieren Sie die Datei mit neuen Linie Separatoren in Linux und Unix gelesen werden.

2

Eine Möglichkeit, mit GNU coreutils:

< file.txt tr -d '\r' 
0

Eine Änderung der Gewinn Antwort, wenn Sie nach Datei

grep -URl ^M . | grep .php | xargs dos2unix 

I verwendet dos2unix statt fromdos aber der Effekt sollte die Endung filtern müssen sein gleich.