33 votos

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

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

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

42voto

saschabeaumont Puntos 2632

Probablemente esté buscando dos2unix , unix2dos , todos o fromdos dependiendo de su distribución. Paquete Ubuntu/Debian todos / fromdos como parte del tofrodos paquete de memoria.

4 votos

En caso de que alguien se encuentre con esta pregunta buscando soluciones para Windows, el sitio de dos2unix es waterlan.home.xs4all.nl/dos2unix.html y también funciona en Windows.

0 votos

Puede instalar dos2unix / unix2dos en Mac OS X utilizando Homebrew . Con Homebrew instalado, el comando es brew install dos2unix que utiliza esta fórmula .

24voto

Steven Murawski Puntos 6665

Una opción es utilizar unix2dos (y dos2unix para volver atrás) en la línea de comandos.

Otra es utilizar un editor de texto:
En el caso de vi: :set ff=dos para que los finales de línea sean finales de línea dos.
Para emacs: C-x [ENTER] f dos [ENTER]

Para tu editor favorito basado en GUI (por ejemplo, jedit) te recomiendo que consultes el manual o Google.

Por último, si no quieres lidiar con un editor de texto y lo haces con utilidades más comunes y demás (o no tienes instalado unix2dos):

tr -d '\r' < infile > outfile para pasar de Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txt para pasar de Unix -> Windows como tr no puede pasar de Unix a Windows.

0 votos

¡dos2unix hizo el truco, sin embargo gracias por la utilidad tr, podría haber ahorrado tanto tiempo en el pasado!

0 votos

Si un archivo tiene terminaciones de línea mixtas, asegúrese de cargarlo en la forma adecuada ff : :e ++ff=unix . Al menos tiene sentido para dos -> unix conversión.

0 votos

Ese awk one liner es enseñar a un hombre a pescar, gracias por eso. Tendré un poco menos de hambre en el futuro

13voto

nedm Puntos 4392

Edítalo en Vim y utiliza el botón set fileformat comando.

  • MS-DOS/Windows (saltos CR+LF) a *nix (saltos sólo LF)

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

    :set fileformat=dos
    :wq

0 votos

Tenga cuidado al utilizarlo si el archivo no tiene ya un salto de línea en la última línea; vim añadirá uno a menos que sepa cómo decirle que no lo haga.

0 votos

Después de horas de probar todas las demás soluciones, esto fue el salvavidas que necesitaba. Comportamiento confirmado en OS X Yosemite con hexdump -C -- también confirmó que esto es no pegajoso -- se fija por vi sesión

8voto

AMH Puntos 16

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

tr -d \\015 < windows > unix

0 votos

El cartel quería finales de línea de unix a windows. Y tú llegas algunos años tarde con tu respuesta.

5 votos

¿A quién le importa si llega "con años de retraso"? Sigue funcionando, y sigue siendo aplicable a la pregunta. Sólo estaba añadiendo otra opción para los lectores que se encuentren con ella, como yo. Además, su pregunta pide Windows -> Unix, y su descripción pide Unix -> Windows. encogimiento de hombros

0 votos

Sí. Tal vez agregue el otro comando tr para convertir unix a Windows entonces.

1voto

Steven Penny Puntos 147

Hacer esto con POSIX es complicado:

  • POSIX Sed no admite \r o \15 . Incluso si lo hiciera, el en lugar opción -i no es POSIX

  • POSIX Awk soporta \r y \15 Sin embargo, el -i inplace opción no es POSIX

  • d2u y dos2unix no son Utilidades POSIX pero ex es

  • POSIX ex no admite \r , \15 , \n o \12

Para eliminar los retornos de carro:

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

Para añadir retornos de carro:

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: