¿Hay un comando Bash para convertir \ r \ n a \ n?


19

¿Hay un comando Bash para convertir \ r \ n a \ n?

Cuando subo mis scripts de Windows a Linux, necesito una utilidad como esta para que todo funcione.


77
dos2unixgeneralmente está disponible, de lo contrariosed -e 's/\r$//'
falstro

1
No, no hay un comando Bash para eso, pero hay dos2unixun programa Unix / Linux para hacer lo que quieras.
Pausado hasta nuevo aviso.

1
¿Por qué no usa un editor de texto sano que le permite elegir el estilo de nueva línea al guardar archivos?
vtest

Respuestas:


28

Ahi esta:

dos2unix

Esta es la respuesta históricamente correcta, aunque dos2unix no siempre está disponible en estos días.
Jared

5

Translate ( tr ) está disponible en todos los Unixes:

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

1
Tiene un efecto secundario de eliminar cualquier otro \rtambién. Sin embargo, son muy poco comunes.
ivan_pozdeev

5

Con sed y encuentra ese final con .txt, .php, .js, .css:

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

5

Hay una utilidad Unix llamada convque puede convertir terminaciones de línea. A menudo se invoca con enlaces suaves a u2do d2uo unix2dosodos2unix .

Además hay utilidades llamadas fromdosy todos.


2

Usando man 1 ed (que edita archivos in situ sin ninguna copia de seguridad previa, a diferencia de: sed .. -i ".bak" ...):

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

Ni siquiera lo sabía, pero hace el trabajo (viejo pero dorado)
dwana

Este comando funcionó para mí cuando los comandos de otras respuestas no existían en el alojamiento compartido que estoy usando. Gracias :)
FKasa

2

Hacer esto con POSIX es complicado:

  • POSIX Sed no es compatible con \ro \15. Incluso si lo hiciera, la opción en el lugar -ino es POSIX

  • POSIX Awk es compatible \ry \15, sin embargo, el-i inplace opción no es POSIX

  • d2u y dos2unix no son utilidades POSIX , pero ex es

  • POSIX ex no soporta \r, \15, \no\12

Para eliminar retornos de carro:

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

Para agregar retornos de carro:

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


0

$ recode dos .. ARCHIVO
$ flip -u ARCHIVO

(Cada uno también existe para sistemas que no son Ubuntu, pero estos enlaces son útiles).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.