it-swarm-pt.tech

Converter os finais de linha do DOS em finais de linha do Linux no vim

Se eu abrir arquivos que criei no Windows, todas as linhas terminarão com ^M.
Como eu excluo esses caracteres de uma só vez?

652
Bert Hekman

dos2unix é um utilitário de linha de comando que fará isso, ou :%s/^M//g irá se você usar Ctrl-vCtrl-m para introduzir o ^ M, ou você pode :set ff=unix e vim irão fazer isso por você.

Os documentos na configuração 'fileformat' são aqui , e o wiki do vim tem uma descrição abrangente page on line ending conversions .

Alternativamente, se você mover arquivos muito para frente e para trás, você pode não querer convertê-los, mas sim fazer :set ff=dos, então o vim saberá que é um arquivo DOS e usará convenções do DOS para finais de linha.

995
pjz

Altere os finais de linha na exibição:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

Isso também pode ser usado como operação de salvamento (só não será salva usando as terminações de linha que você vê na tela):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

E você pode usá-lo a partir da linha de comando:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done
250
Ludvig A. Norin

Eu normalmente uso

:%s/\r/\r/g

o que parece um pouco estranho, mas funciona devido ao modo como o vim combina com os linefeeds. Eu também acho mais fácil de lembrar :)

154
t-dub

Eu prefiro usar o seguinte comando:

:set fileformat=unix

Você também pode usar mac ou dos para converter o arquivo para a convenção de arquivo do Macintosh ou do MS-DOS/MS-Windows, respectivamente. E não faz nada se o arquivo já estiver no formato correto.

Para mais informações, veja a ajuda do vim:

:help fileformat
79
Sylvain Defresne
:%s/\r+//g

No Vim, isso retira todos os retornos de carro e deixa apenas novas linhas.

19
mercutio

:set fileformat=unix para converter de dos para unix.

16
Martin Sjögren
13
Alex Gartrell

dos2unix pode modificar diretamente o conteúdo do arquivo.

Você pode usá-lo diretamente no arquivo, sem necessidade de redirecionamento de arquivo temporário.

dos2unix input.txt input.txt

O acima usa o teclado US assumido. Use a opção -437 para usar o teclado do Reino Unido.

dos2unix -437 input.txt input.txt
9
Venkataramesh Kommoju

Converter diretório de arquivos do dos para Unix

Usando linha de comando e sed, encontre todos os arquivos no diretório atual com a extensão ".ext" e remova todos os "^ M"

@ https://Gist.github.com/sparkida/777317

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

também, como mencionado acima ^ M Ctrl+V + Ctrl+M (não basta digitar o símbolo "^" e M)

7
Sparkida
tr -d '\15\32' < winfile.txt > unixfile.txt

(veja: http://kb.iu.edu/data/acux.html )

6
MichaelD

Com o seguinte comando:

:%s/^M$//g 

Obter o ^M para aparecer tipo CtrlV então CtrlMCtrlV diz ao Vim para pegar o próximo caractere digitado literalmente.

5
Dave Webb

As etapas a seguir podem converter o formato de arquivo para dos para unix:

:e ++ff=dos  Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix    This buffer will use LF-only line endings when written.[A 2]
:w   Write buffer using unix (LF-only) line endings.

Referência: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

5
ajitomatix

Você pode usar:

vim somefile.txt +"%s/\r/\r/g" +wq

ou dos2unix utility.

4
Christy Wald
:g/Ctrl-v Ctrl-m/s///

CtrlM é o caractere \r ou o retorno de carro, que os terminais de linha do DOS adicionam. CtrlV diz ao vim para inserir um literal CtrlM personagem na linha de comando.

Como um todo, esse comando substitui todo \r por nada, removendo-os das extremidades das linhas.

4
Rob Wells

O comentário sobre colocar o ^ M para aparecer é o que funcionou para mim. Apenas digitando "^ M" no meu vi não tem nada (não encontrado). o CTRL+VCTRL+M seqüência fez isso perfeitamente embora.

Meu comando de substituição de trabalho foi

:%s/Ctrl-V Ctrl-M/\r/g

e ficou assim na minha tela:

:%s/^M/\r/g
4
Dannid

Eu encontrei uma maneira muito fácil: Abra o arquivo com nano: nano file.txt

Pressione CTRL+O para salvar, mas antes de pressionar Enter, pressione: ALT+D para alternar entre os finais de linha DOS e Unix/Linux, ou: ALT+M para alternar entre finais de linha Mac e Unix/Linux e pressione Enter para salvar e CTRL+X para sair.

4
Stefan Sjöberg

Você pode usar o seguinte comando:
:%s/^V^M//g
onde o '^' significa usar CTRL chave.

3
JayG

abaixo o comando é usado para reformatar todo o arquivo .sh no diretório atual, eu testei no meu sistema operacional Fedora.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
2
user3220487

Eu sabia que tinha visto isso em algum lugar. Aqui está a dica de login do FreeBSD:

Precisa remover todos os caracteres ^ M de um arquivo DOS? Experimentar

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>
1
Albaro Pereyra

Geralmente há um comando dos2unix que você pode usar para isso, apenas certifique-se de ler o manual, já que as versões GNU e BSD diferem em como eles lidam com os argumentos.

Versão BSD:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

Versão GNU:

dos2unix $FILENAME

Alternativamente, você pode criar seu próprio dos2unix com qualquer uma das respostas propostas aqui, por exemplo:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}
1
dsm

Para rodar diretamente no console do Linux: vim file.txt +"set ff=unix" +wq

1
CBuzatu

No vim, digite:

:w !dos2unix %

Isso canalizará o conteúdo do seu buffer atual para o comando dos2unix e gravará os resultados sobre o conteúdo atual. O Vim pedirá para recarregar o arquivo após

1
Tallak Tveide

se você criar um arquivo no NotePad ou NotePad ++ no Windows e trazê-lo para o Linux e abri-lo pelo vim, você verá ^ M no final de cada linha. Para remover isso,

No seu terminal Linux, digite

dos2unix filename.ext

Isso fará a mágica necessária.

0
Santle Camilus

Embora este tópico seja muito antigo, gostaria de colocar outras coisas da wikia:

%s/\r\+$//g

que preencher encontrar todos os sinais de retorno de carro (um e mais repetições) até o final da linha e excluir, para apenas \n vai ficar no eol.

0
loadaverage

Esta é a minha maneira. Eu abri um arquivo no DOS EOL e quando eu salvar o arquivo que irá converter automaticamente para unix EOL

autocmd BufWrite * :set ff=unix
0
Thomas PABST

Eu queria novas linhas no lugar das ^ M's. Perl para o resgate:

Perl -pi.bak -e 's/\x0d/\n/g' Excel_created.txt

Ou para escrever para stdout:

Perl -p -e 's/\x0d/\n/g' < Excel_created.txt
0
user3379574