Esiste un comando Bash per convertire \ r \ n in \ n?


19

Esiste un comando Bash per convertire \ r \ n in \ n?

Quando carico i miei script da Windows a Linux, ho bisogno di un'utilità come questa per far funzionare le cose.


7
dos2unixdi solito è disponibile, altrimentised -e 's/\r$//'
falstro

1
No, non esiste un comando Bash per questo, ma esiste dos2unixun programma Unix / Linux per fare quello che vuoi.
In pausa fino a nuovo avviso.

1
Perché non usi semplicemente un editor di testo sano che ti consente di scegliere lo stile di nuova riga quando salvi i file?
vtest

Risposte:


28

C'è:

dos2unix

Questa è la risposta storicamente corretta, sebbene dos2unix non sia sempre disponibile in questi giorni.
Jared

5

Translate ( tr ) è disponibile in tutti gli Unix:

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

1
Ha un effetto collaterale di rimuovere anche qualsiasi altro \r. Sono molto rari però.
ivan_pozdeev, l'

5

Con sed e trova che fine con .txt, .php, .js, .css:

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

5

Esiste un'utilità Unix chiamata convche può convertire le terminazioni di linea. Viene spesso invocato con collegamenti software a u2do d2uo unix2doso dos2unix.

Inoltre ci sono utility chiamate fromdose todos.


2

Usando man 1 ed (che modifica i file sul posto senza alcun backup precedente - a differenza di: sed .. -i ".bak" ...):

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

Non lo sapevo nemmeno, ma fa il lavoro (vecchio ma d'oro)
dwana,

Questo comando ha funzionato per me quando non esistevano comandi da altre risposte sull'hosting condiviso che sto usando. Grazie :)
FKasa,

2

Farlo con POSIX è complicato:

  • POSIX Sed non supporta \ro \15. Anche se così fosse, l'opzione sul posto -inon è POSIX

  • POSIX Awk supporta \re \15, tuttavia, l' -i inplaceopzione non è POSIX

  • D2U e dos2unix non sono POSIX utilità , ma ex è

  • POSIX ex non supporta \r, \15, \no\12

Per rimuovere i ritorni a capo:

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

Per aggiungere resi di trasporto:

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


0

$ recode dos .. FILE
$ flip -u FILE

(Ciascuno esiste anche per sistemi non Ubuntu, ma questi collegamenti sono utili.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.