Convertendo formatação de nova linha do Mac para o Windows

Eu preciso de um utilitário de conversão / script que irá converter um arquivo de despejo .sql gerado no Mac para um legível no Windows. Esta é uma continuação de um problema que tive aqui . O problema parece ser a formatação de nova linha em arquivos de texto, mas não consigo encontrar uma ferramenta para fazer a conversão …

O Windows usa carriage return line feed + line feed de linha para nova linha:

 \r\n 

O Unix usa apenas o Line feed de linha para nova linha:

 \n 

Em conclusão, simplesmente substitua todas as ocorrências de \n por \r\n .
Tanto o unix2dos quanto o dos2unix não estão disponíveis por padrão no Mac OSX.
Felizmente, você pode simplesmente usar Perl ou sed para fazer o trabalho:

 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 

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

Esta é uma versão melhorada da resposta de Anne – se você usar perl, você pode fazer a edição no arquivo ‘in-place’ ao invés de gerar um novo arquivo:

 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 

Você pode instalar o unix2dos com o Homebrew

 brew install unix2dos 

Então você pode fazer isso:

 unix2dos file-to-convert 

Você também pode converter dos arquivos em unix:

 dos2unix file-to-convert 

Você provavelmente quer 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. 

Você pode executar unix2dos em sua máquina DOS / Windows usando cygwin ou em seu Mac usando MacPorts .

Apenas tr delete:

 tr -d "\r" outfile.txt 
  1. Instale o dos2unix com o homebrew
  2. Execute ‘find ./ -tipo f -exec dos2unix {} \;’ converter recursivamente todos os finais de linha dentro da pasta atual

vim também pode converter arquivos do UNIX para o formato DOS. Por exemplo:

 vim hello.txt < 

No Yosemite OSX, use este comando:

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

onde a sequência ^M é obtida pressionando Ctrl + V e depois Enter .

A seguir, um script completo com base nas respostas acima, juntamente com verificação de sanidade e funciona no Mac OS X e deve funcionar em outros sistemas Linux / Unix (embora isso não tenha sido testado).

 #!/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 

Aqui está uma abordagem muito simples, funcionou bem para mim, cortesia do Weblog de Davy Schmeits :

 cat foo | col -b > foo2 

Onde foo é o arquivo que possui os caracteres Control + M no final da linha e foo2 o novo arquivo que você está criando.

Expandindo as respostas de Anne e JosephH, usando perl em um script perl curto, desde que eu sou muito preguiçoso para digitar o perl-one-liner muito tempo.
Crie um arquivo, nomeado por exemplo “unix2dos.pl” e coloque-o em um diretório em seu caminho. Edite o arquivo para conter as duas linhas:

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

Assumindo que “qual perl” retorna “/ usr / bin / perl” no seu sistema. Faça o arquivo executável (chmod u + x unix2dos.pl).

Exemplo:
$ echo “olá”> xxx
$ od -c xxx (verificando se o arquivo termina com um nl)
0000000 ola \ n

$ unix2dos.pl xxx
$ od -c xxx (verificando que termina agora em cr lf)
0000000 Olá \ r \ n

No Xcode 9 no painel esquerdo, abra / escolha seu arquivo no navegador do projeto . Se o arquivo não estiver lá, use a droga e solte-o no navegador do projeto .

No painel direito, localize Configurações de texto e altere os Endings de linha para o Windows (CRLF) .

XCode screendump screendump de XCode

    Intereting Posts