Como converter quebras de linha em um arquivo de texto entre os formatos Windows e Unix / Linux?

33

Como converter quebras de linha em um arquivo de texto entre os formatos Windows e Unix / Linux?

Eu tenho um ambiente * nix, mas preciso importar e exportar dados com as quebras de linha no estilo do Windows. Eu pensei que haveria um utilitário ou comando padrão para fazer isso, mas não consigo encontrá-lo.

alexeit
fonte

Respostas:

42

Você provavelmente está procurando dos2unix, unix2dos, todosou fromdosdependendo da sua distribuição. Pacote Ubuntu / Debian todos/ fromdoscomo parte do pacote tofrodos da memória.

saschabeaumont
fonte
4
Caso alguém dos2unixse depare com essa pergunta procurando soluções do Windows, o site upstream é waterlan.home.xs4all.nl/dos2unix.html e também funciona no Windows.
womble
Você pode instalar dos2unix/unix2dos no Mac OS X usando o Homebrew . Com o Homebrew instalado, o comando é brew install dos2unix, que usa essa fórmula .
Rory O'Kane
24

Uma opção é usar unix2dos(e dos2unixpara voltar) na linha de comando.

Outra é usar um editor de texto:
Para vi:: defina ff = dos para definir as terminações de linha como sendo finais de linha dos.
Para emacs: Cx [ENTER] f dos [ENTER]

Para o seu editor favorito baseado em GUI (por exemplo, jedit), recomendo verificar o manual ou o Google.

Por fim, se você não deseja lidar com um editor de texto e apenas o faz usando utilitários mais comuns e outros (ou não possui o unix2dos instalado):

tr -d '\r' < infile > outfileir do Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txtpara ir do Unix -> Windows, pois trnão pode ir do Unix para o Windows.

Chealion
fonte
dos2unix fez o truque, no entanto, graças ao utilitário tr, ele poderia ter economizado muito tempo no passado!
Alexeit
Se um arquivo tem fins de linha mistos, certifique-se de carregá-lo no bom ff: :e ++ff=unix. Pelo menos, faz sentido para a dos -> unixconversão.
X-yuri
Aquele estranho forro está ensinando um homem a pescar, obrigado por isso. Serei um pouco menos faminto no futuro
Gareth Davidson
13

Edite-o no Vim e use o set fileformatcomando

  • MS-DOS / Windows (quebras de CR + LF) para * nix (apenas quebras de LF)

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

    :set fileformat=dos
    :wq
    
nedm
fonte
Tenha cuidado ao usá-lo se o arquivo ainda não tiver uma quebra de linha na última linha; O vim adicionará um, a menos que você saiba como fazê-lo.
CesarB
Depois de horas tentando todas as outras soluções, esse era o salva-vidas que eu precisava. Comportamento confirmou no OS X Yosemite com hexdump -C- também confirmou este é não pegajosa - ele é definido por visessão
Techmag
8

É isso que eu uso, semelhante ao Chealion, para converter o Windows em finais de linha Unix:

tr -d \\015 < windows > unix
Josh
fonte
O pôster queria unix para finais de linha do Windows. E você está alguns anos atrasado com sua resposta.
7--12
5
Quem se importa se é "anos atrasado"? Ainda funciona, e ainda é aplicável à pergunta. Eu estava apenas adicionando outra opção para os leitores que encontrarem, como eu. Além disso, sua pergunta pede Windows -> Unix, e sua descrição pede Unix -> Windows. encolher de ombros
Josh
Direita. Talvez você adicione o outro comando tr para converter o unix para o Windows então.
9--12
Tentei desfazer o voto negativo, mas ele disse que está bloqueado até que o artigo seja editado.
9--12
@ ott-- não há problema, eu votei para você. ... espera, agora não posso votar em mim! ... dang ... :)
Alois Mahdal
1

Fazer isso com o POSIX é complicado:

  • O POSIX Sed não suporta \rou \15. Mesmo se tiver, a opção no local -inão é POSIX

  • O POSIX Awk suporta \re \15, no entanto, a -i inplaceopção não é POSIX

  • O d2u e o dos2unix não são utilitários POSIX , mas ex é

  • POSIX ex não suporta \r, \15, \nou\12

Para remover retornos de carro:

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

Para adicionar retornos de carro:

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