¿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.

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.


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.


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
    

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

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
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.