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.