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