it-swarm-pt.tech

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

Como converto 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.

33
alexeit

Você provavelmente está procurando por dos2unix, unix2dos, todos ou fromdos dependendo da sua distribuição. Pacote Ubuntu/Debian todos/fromdos como parte do pacote tofrodos da memória.

42
saschabeaumont

Uma opção é usar unix2dos (E dos2unix Para voltar) na linha de comando.

Outra é usar um editor de texto:
Para vi:: defina ff = dos para definir as terminações da linha como sendo finais da linha dos.
Para o emacs: C-x [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 usa usando utilitários mais comuns e afins (ou não possui o unix2dos instalado):

tr -d '\r' < infile > outfile Para ir do Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txt para ir do Unix -> Windows como tr não pode ir do Unix para o Windows.

24
Chealion

Edite-o no Vim e use o set fileformat comando.

  • 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
    
13
nedm

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

tr -d \\015 < windows > unix
8
Josh

Fazer isso com o POSIX é complicado:

  • POSIX Sed não suporta \r ou \15. Mesmo assim, a opção em vigor -i não é POSIX

  • POSIX Awk suporta \r e \15, No entanto, o -i inplace opção não é POSIX

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

  • POSIX ex não suporta \r, \15, \n ou \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
1
Steven Penny