¿Cómo convertir saltos de línea en un archivo de texto entre los formatos Windows y Unix / Linux?

33

¿Cómo convierto los saltos de línea en un archivo de texto entre los formatos de Windows y Unix / Linux?

Tengo un entorno * nix, pero necesito importar y exportar datos con los saltos de línea de estilo Windows. Pensé que habría una utilidad o comando estándar para hacer esto, pero parece que no puedo encontrarlo.

alexeit
fuente

Respuestas:

42

Probablemente se esté buscando dos2unix, unix2dos, todoso fromdosdependiendo de su distribución. Paquete Ubuntu / Debian todos/ fromdoscomo parte del paquete tofrodos desde la memoria.

Saschabeaumont
fuente
44
En caso de que alguien se encuentre con esta pregunta buscando soluciones de Windows, el sitio principal dos2unixes waterlan.home.xs4all.nl/dos2unix.html , y también funciona en Windows.
womble
Puede instalar dos2unix/unix2dos en Mac OS X usando Homebrew . Con Homebrew instalado, el comando es brew install dos2unix, que utiliza esta fórmula .
Rory O'Kane
24

Una opción es usar unix2dos(y dos2unixpara volver) en la línea de comando.

Otra es usar un editor de texto:
Para vi:: configure ff = dos para establecer que las terminaciones de línea sean terminaciones de línea dos.
Para emacs: Cx [ENTRAR] f dos [ENTRAR]

Para su editor basado en GUI favorito (por ejemplo, jedit), le recomiendo consultar el manual o Google.

Por último, si no desea lidiar con un editor de texto y simplemente hacerlo utilizando utilidades más comunes y demás (o no tiene unix2dos instalado):

tr -d '\r' < infile > outfileir de Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txtpara ir de Unix -> Windows, ya trque no puede ir de Unix a Windows.

Chealion
fuente
dos2unix hizo el truco, sin embargo, gracias por la utilidad tr, ¡podría haber ahorrado tanto tiempo en el pasado!
alexeit
Si un archivo tiene los finales de línea mixta, asegúrese de cargarlo en la correcta ff: :e ++ff=unix. Al menos tiene sentido para la dos -> unixconversión.
x-yuri
Ese awk one liner le enseña a un hombre a pescar, gracias por eso Estaré un poco menos hambriento en el futuro
Gareth Davidson
13

Edítelo en Vim y use el set fileformatcomando.

  • MS-DOS / Windows (CR + LF se rompe) a * nix (LF solo se rompe)

    :set fileformat=unix
    :wq
    
  • * nix a MS-DOS / Windows

    :set fileformat=dos
    :wq
    
nedm
fuente
Tenga cuidado al usar eso si el archivo aún no tiene un salto de línea en la última línea; vim agregará uno a menos que sepa cómo decirle que no lo haga.
CesarB
Después de horas de probar cualquier otra solución, este fue el salvavidas que necesitaba. Comportamiento confirmado en OS X Yosemite con hexdump -C- también confirmado que esto no es pegajoso - se configura por visesión
Techmag
8

Esto es lo que uso, similar a Chealion, para convertir Windows a finales de línea Unix:

tr -d \\015 < windows > unix
Josh
fuente
El cartel quería terminaciones de línea de Unix a Windows. Y llegas algunos años tarde con tu respuesta.
ott--
55
¿A quién le importa si es "años tarde"? Todavía funciona, y todavía es aplicable a la pregunta. Solo estaba agregando otra opción para los lectores que se encuentran, como yo. Además, su pregunta pide Windows -> Unix, y su descripción pide Unix -> Windows. encogiéndose de hombros
Josh
Correcto. Tal vez agregue el otro comando tr para convertir Unix a Windows en ese momento.
ott--
Traté de deshacer el voto negativo, pero dijo que está bloqueado hasta que se edite el artículo.
ott--
@ ott-- no hay problema, he votado por ti. ... espera, ¡ahora no puedo votar por mí! ... dang ... :)
Alois Mahdal
1

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, la -i inplaceopció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
Steven Penny
fuente