Gibt es einen Bash-Befehl zum Konvertieren von \ r \ n nach \ n?


19

Gibt es einen Bash-Befehl zum Konvertieren von \ r \ n nach \ n?

Wenn ich meine Skripte von Windows nach Linux hochlade, benötige ich ein solches Dienstprogramm, damit die Dinge funktionieren.


7
dos2unixist in der Regel verfügbar, sonstsed -e 's/\r$//'
— Falstro

1
Nein, dafür gibt es keinen Bash-Befehl, aber es dos2unixgibt ein Unix / Linux-Programm, mit dem Sie tun können, was Sie wollen.
— Bis auf weiteres angehalten.

1
Warum verwenden Sie nicht einfach einen vernünftigen Texteditor, mit dem Sie beim Speichern von Dateien den Newline-Stil auswählen können?
— Vtest

Antworten:


28

Es gibt:

dos2unix

Dies ist die historisch korrekte Antwort, obwohl dos2unix heutzutage nicht immer verfügbar ist.
— Jared

5

Translate ( tr ) ist in allen Unixen verfügbar:

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.

1
Hat den Nebeneffekt, dass auch andere entfernt \rwerden. Sie sind jedoch sehr ungewöhnlich.
— Iwan_Pozdeev

5

Mit sed und finde das Ende mit .txt, .php, .js, .css:

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")

5

Es gibt ein Unix-Dienstprogramm conv, das Zeilenenden konvertieren kann. Es wird häufig mit Softlinks zu u2doder d2uoder unix2dosoder aufgerufen dos2unix.

Zusätzlich gibt es Hilfsprogramme namens fromdosund todos.


2

Verwenden von man 1 ed (das Dateien ohne vorherige Sicherung bearbeitet - im Gegensatz zu: sed .. -i ".bak" ...):

ed -s file <<< $'H\ng/\r*$/s///\nwq'

Ich weiß es noch nicht einmal, aber es macht den Job (alt, aber gold)
— Dwana

Dieser Befehl hat bei mir funktioniert, wenn auf dem von mir verwendeten Shared Hosting keine Befehle aus anderen Antworten vorhanden waren. Danke :)
— FKasa

2

Dies mit POSIX zu tun, ist schwierig:

  • POSIX Sed unterstützt \roder nicht \15. Selbst wenn dies der Fall -iist , ist die In-Place-Option nicht POSIX

  • POSIX Awk unterstützt \rund \15die -i inplaceOption ist jedoch nicht POSIX

  • d2u und dos2unix sind keine POSIX-Dienstprogramme , aber ex ist

  • POSIX ex nicht unterstützt \r, \15, \noder\12

So entfernen Sie Wagenrückläufe:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

So fügen Sie Wagenrückläufe hinzu:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file


0

$ recode dos .. DATEI
$ flip -u DATEI

(Beide existieren auch für Nicht-Ubuntu-Systeme, aber diese Links sind praktisch.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.