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.