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.

user25321
quelle
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
RaYell
quelle
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.
Peter Mortensen
quelle
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\)")
fitorec
quelle
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.

Steven Penny
quelle
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'

quelle
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
Steven Penny
quelle
0

Ja, benutze dos2unix. Beispielsweise:

[justin@mybox ~]$ dos2unix myfile
Justin Ethier
quelle
0

$ recode dos .. DATEI
$ flip -u DATEI

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


quelle