Conversión de formato de nueva línea de Mac a Windows

Necesito una utilidad / script de conversión que convierta un archivo de volcado .sql generado en Mac a uno legible en Windows. Esto es la continuación de un problema que tuve aquí . El problema parece ser con el formato de nueva línea en los archivos de texto, pero no puedo encontrar una herramienta para realizar la conversión …

Windows usa carriage return + line feed de línea para nueva línea:

 \r\n 

Unix solo usa Line feed para nueva línea:

 \n 

En conclusión, simplemente reemplace cada ocurrencia de \n por \r\n .
Tanto unix2dos como dos2unix no están disponibles por defecto en Mac OSX.
Afortunadamente, puedes usar Perl o sed para hacer el trabajo:

 sed -e 's/$/\r/' inputfile > outputfile # UNIX to DOS (adding CRs) sed -e 's/\r$//' inputfile > outputfile # DOS to UNIX (removing CRs) perl -pe 's/\r\n|\n|\r/\r\n/g' inputfile > outputfile # Convert to DOS perl -pe 's/\r\n|\n|\r/\n/g' inputfile > outputfile # Convert to UNIX perl -pe 's/\r\n|\n|\r/\r/g' inputfile > outputfile # Convert to old Mac 

Fragmento de código de:
http://en.wikipedia.org/wiki/Newline#Conversion_utilities

Esta es una versión mejorada de la respuesta de Anne: si usa Perl, puede hacer la edición en el archivo ‘in situ’ en lugar de generar un nuevo archivo:

 perl -pi -e 's/\r\n|\n|\r/\r\n/g' file-to-convert # Convert to DOS perl -pi -e 's/\r\n|\n|\r/\n/g' file-to-convert # Convert to UNIX 

Puede instalar unix2dos con Homebrew

 brew install unix2dos 

Entonces puedes hacer esto:

 unix2dos file-to-convert 

También puede convertir dos archivos a Unix:

 dos2unix file-to-convert 

Probablemente quieras unix2dos :

 $ man unix2dos NAME dos2unix - DOS/MAC to UNIX and vice versa text file format converter SYNOPSIS dos2unix [options] [-c CONVMODE] [-o FILE ...] [-n INFILE OUTFILE ...] unix2dos [options] [-c CONVMODE] [-o FILE ...] [-n INFILE OUTFILE ...] DESCRIPTION The Dos2unix package includes utilities "dos2unix" and "unix2dos" to convert plain text files in DOS or MAC format to UNIX format and vice versa. Binary files and non- regular files, such as soft links, are automatically skipped, unless conversion is forced. Dos2unix has a few conversion modes similar to dos2unix under SunOS/Solaris. In DOS/Windows text files line endings exist out of a combination of two characters: a Carriage Return (CR) followed by a Line Feed (LF). In Unix text files line endings exists out of a single Newline character which is equal to a DOS Line Feed (LF) character. In Mac text files, prior to Mac OS X, line endings exist out of a single Carriage Return character. Mac OS X is Unix based and has the same line endings as Unix. 

Puede ejecutar unix2dos en su máquina DOS / Windows usando cygwin o en su Mac usando MacPorts .

Solo haz tr eliminar:

 tr -d "\r" outfile.txt 
  1. Instalar dos2unix con homebrew
  2. Ejecute ‘find ./ -type f -exec dos2unix {} \;’ convertir recursivamente todas las terminaciones de línea dentro de la carpeta actual

vim también puede convertir archivos de UNIX a formato DOS. Por ejemplo:

 vim hello.txt <  

En Yosemite OSX, use este comando:

 sed -e 's/^M$//' -i '' filename 

donde la secuencia ^M se logra presionando Ctrl + V y luego Enter .

La siguiente es una secuencia de comandos completa basada en las respuestas anteriores junto con la comprobación de la cordura y funciona en Mac OS X y debería funcionar también en otros sistemas Linux / Unix (aunque esto no se ha probado).

 #!/bin/bash # http://stackoverflow.com/questions/6373888/converting-newline-formatting-from-mac-to-windows # ============================================================================= # = # = FIXTEXT.SH by ECJB # = # = USAGE: SCRIPT [ MODE ] FILENAME # = # = MODE is one of unix2dos, dos2unix, tounix, todos, tomac # = FILENAME is modified in-place # = If SCRIPT is one of the modes (with or without .sh extension), then MODE # = can be omitted - it is inferred from the script name. # = The script does use the file command to test if it is a text file or not, # = but this is not a guarantee. # = # ============================================================================= clear script="$0" modes="unix2dos dos2unix todos tounix tomac" usage() { echo "USAGE: $script [ mode ] filename" echo echo "MODE is one of:" echo $modes echo "NOTE: The tomac mode is intended for old Mac OS versions and should not be" echo "used without good reason." echo echo "The file is modified in-place so there is no output filename." echo "USE AT YOUR OWN RISK." echo echo "The script does try to check if it's a binary or text file for sanity, but" echo "this is not guaranteed." echo echo "Symbolic links to this script may use the above names and be recognized as" echo "mode operators." echo echo "Press RETURN to exit." read answer exit } # -- Look for the mode as the scriptname mode="`basename "$0" .sh`" fname="$1" # -- If 2 arguments use as mode and filename if [ ! -z "$2" ] ; then mode="$1"; fname="$2"; fi # -- Check there are 1 or 2 arguments or print usage. if [ ! -z "$3" -o -z "$1" ] ; then usage; fi # -- Check if the mode found is valid. validmode=no for checkmode in $modes; do if [ $mode = $checkmode ] ; then validmode=yes; fi; done # -- If not a valid mode, abort. if [ $validmode = no ] ; then echo Invalid mode $mode...aborting.; echo; usage; fi # -- If the file doesn't exist, abort. if [ ! -e "$fname" ] ; then echo Input file $fname does not exist...aborting.; echo; usage; fi # -- If the OS thinks it's a binary file, abort, displaying file information. if [ -z "`file "$fname" | grep text`" ] ; then echo Input file $fname may be a binary file...aborting.; echo; file "$fname"; echo; usage; fi # -- Do the in-place conversion. case "$mode" in # unix2dos ) # sed does not behave on Mac - replace w/ "todos" and "tounix" # # Plus, these variants are more universal and assume less. # sed -e 's/$/\r/' -i '' "$fname" # UNIX to DOS (adding CRs) # ;; # dos2unix ) # sed -e 's/\r$//' -i '' "$fname" # DOS to UNIX (removing CRs) # ;; "unix2dos" | "todos" ) perl -pi -e 's/\r\n|\n|\r/\r\n/g' "$fname" # Convert to DOS ;; "dos2unix" | "tounix" ) perl -pi -e 's/\r\n|\n|\r/\n/g' "$fname" # Convert to UNIX ;; "tomac" ) perl -pi -e 's/\r\n|\n|\r/\r/g' "$fname" # Convert to old Mac ;; * ) # -- Not strictly needed since mode is checked first. echo Invalid mode $mode...aborting.; echo; usage ;; esac # -- Display result. if [ "$?" = "0" ] ; then echo "File $fname updated with mode $mode."; else echo "Conversion failed return code $?."; echo; usage; fi 

Este es un enfoque realmente simple, funcionó bien para mí, cortesía del Weblog de Davy Schmeits :

 cat foo | col -b > foo2 

Donde foo es el archivo que tiene los caracteres Control + M al final de la línea, y foo2 el nuevo archivo que está creando.

Ampliar las respuestas de Anne y JosephH, usando perl en un guión de perl corto, ya que soy demasiado perezoso para escribir el perl-one-liner muy a tiempo.
Cree un archivo, llamado por ejemplo “unix2dos.pl” y póngalo en un directorio en su ruta. Edite el archivo para que contenga las 2 líneas:

 #!/usr/bin/perl -wpi s/\n|\r\n/\r\n/g; 

Asumiendo que “which perl” devuelve “/ usr / bin / perl” en su sistema. Haga que el archivo sea ejecutable (chmod u + x unix2dos.pl).

Ejemplo:
$ echo “hola”> xxx
$ od -c xxx (verificando que el archivo termine con un nl)
0000000 hola \ n

$ unix2dos.pl xxx
$ od -c xxx (comprobando que ahora termina en cr lf)
0000000 hola \ r \ n

En Xcode 9 en el panel izquierdo, abra / elija su archivo en el navegador del proyecto . Si el archivo no está allí, tráigalo y colóquelo en el navegador del proyecto .

En el panel derecho, busque Configuración de texto y cambie Fin de línea a Windows (CRLF) .

XCode screendump screendump de XCode