Se você faz um hexdump -C badfilee vê 0x0d 0x0a"\r\n"que esse é o seu problema.
Yzmir Ramirez 08/06/19
Respostas:
1075
dos2unix é um utilitário de linha de comando que fará isso, ou :%s/^M//gfará se você usar Ctrl- vCtrl- mpara inserir o ^ M, ou poderá:set ff=unix e o vim fará isso por você.
Como alternativa, se você mover arquivos para frente e para trás, talvez não queira convertê-los, mas sim fazê- :set ff=doslo, para que o vim saiba que é um arquivo DOS e use as convenções do DOS para fins de linha.
Isso funciona de maneira consistente entre plataformas. A melhor resposta aqui.
thebigjc
4
Nunca tive problemas com isso :set ff=unixantes, mas o arquivo que abri hoje deve ter sido particularmente estranho. Vim disse que já era, fileformat=unixmas todos os finais de linha eram ^M. Esta solução funcionou para mim.
Chris B
15
Esta solução adiciona linhas extras indesejadas para mim, duplicando o número de linhas no arquivo. :%s/\r//gem vez disso funciona para mim.
Victor Zamanian
3
Victor, é provável que seus arquivos tenham \ r \ n finais. o \ r não é lido como uma nova linha, mas o \ n é. Nos arquivos em que estou encontrando, você precisa adicionar um caractere de nova linha.
Joeyjoejoejr
2
O @ VictorZamanian's :%s/\r//gé a única solução de uso geral - especialmente para arquivos de modo misto que contêm uma mistura heterogênea de novas linhas de estilo DOS e UNIX. As soluções canónicos (por exemplo, :set ff=unix, :e ++ff=unix) assumir cada linha das extremidades tampão circulante no mesmo estilo de nova linha. Às vezes eles fazem; às vezes não. Cue sadface.
precisa saber é o seguinte
97
Eu prefiro usar o seguinte comando:
:set fileformat=unix
Você também pode usar macou dosconverter respectivamente seu arquivo para a convenção de arquivos para Macintosh ou MS-DOS / MS-Windows. E isso não faz nada se o arquivo já estiver no formato correto.
Para obter mais informações, consulte a ajuda do vim:
As etapas a seguir podem converter o formato do 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.
O comentário sobre como aparecer o ^ M é o que funcionou para mim. Apenas digitar "^ M" no meu vi não obteve nada (não encontrado). A sequência CTRL+ VCTRL+ Mfez perfeitamente embora.
Você pode usar em :%svez do :1,$s. %é uma abreviação de 1,$.
the Tin Man
5
Encontrei uma maneira muito fácil: abra o arquivo com nano: nano file.txt
Pressione CTRL+ Opara salvar, mas antes de pressionar Enter, pressione: ALT+ Dpara alternar entre finais de linha DOS e Unix / Linux ou: ALT+ Mpara alternar entre finais de linha Mac e Unix / Linux e, em seguida, pressione Enterpara salvar e CTRL+ Xpara sair.
feito isso em um servidor linux, o arquivo teve ^Mfinais. salve como dos para manter, salve como linux para remover. pode verificar usandocat -v
HattrickNZ
Esta pergunta é sobre vim, não nano.
Grant Birchmeier
5
:g/Ctrl-v Ctrl-m/s///
CtrlMé o caractere \rou retorno de carro que as terminações de linha do DOS adicionam. CtrlVdiz ao vim para inserir um CtrlMcaractere literal na linha de comando.
Tomado como um todo, esse comando substitui tudo \rpor nada, removendo-os do final das linhas.
Isso canalizará o conteúdo do seu buffer atual para o comando dos2unix e gravará os resultados sobre o conteúdo atual. O Vim solicitará que recarregue o arquivo após
Geralmente, existe um dos2unixcomando que você pode usar para isso, apenas certifique-se de ler o manual, pois as versões GNU e BSD diferem em como elas lidam com os argumentos.
se você criar um arquivo no NotePad ou NotePad ++ no Windows e trazê-lo para o Linux e abri-lo pelo vim, verá ^ M no final de cada linha. Para remover isso,
hexdump -C badfile
e vê0x0d 0x0a
"\r\n"
que esse é o seu problema.Respostas:
dos2unix é um utilitário de linha de comando que fará isso, ou
:%s/^M//g
fará se você usar Ctrl- v Ctrl- mpara inserir o ^ M, ou poderá:set ff=unix
e o vim fará isso por você.Os documentos sobre a configuração 'fileformat' estão aqui , e o wiki do vim tem uma página abrangente sobre conversões de final de linha .
Como alternativa, se você mover arquivos para frente e para trás, talvez não queira convertê-los, mas sim fazê-
:set ff=dos
lo, para que o vim saiba que é um arquivo DOS e use as convenções do DOS para fins de linha.fonte
:%s/^M//g
deve ser:%s/\r//g
, porque^M
significa apenas "combinar capital" M "no início da linha".:%s/\r//g
trabalhou para mim, aplausos @Bunykset ff=unix
não faz nada. Talvez ele converta o arquivo, mas todos os^M
caracteres ainda estão lá.Altere as terminações de linha na exibição:
Isso também pode ser usado como operação de salvamento (: w sozinho não salvará usando as terminações de linha que você vê na tela):
E você pode usá-lo na linha de comando:
fonte
:w +ff=unix
é muito melhor do que a maioria das outras coisas escritas aqui, e o script bash é um ótimo bônus.:e
comandos não parecem fazer nada na minha instalação do Windows vim. Minha visão ainda mostra os^M
códigos.Eu normalmente uso
o que parece um pouco estranho, mas funciona devido à maneira como o vim corresponde aos feeds de linha. Também acho mais fácil lembrar :)
fonte
:set ff=unix
antes, mas o arquivo que abri hoje deve ter sido particularmente estranho. Vim disse que já era,fileformat=unix
mas todos os finais de linha eram^M
. Esta solução funcionou para mim.:%s/\r//g
em vez disso funciona para mim.:%s/\r//g
é a única solução de uso geral - especialmente para arquivos de modo misto que contêm uma mistura heterogênea de novas linhas de estilo DOS e UNIX. As soluções canónicos (por exemplo,:set ff=unix
,:e ++ff=unix
) assumir cada linha das extremidades tampão circulante no mesmo estilo de nova linha. Às vezes eles fazem; às vezes não. Cue sadface.Eu prefiro usar o seguinte comando:
Você também pode usar
mac
oudos
converter respectivamente seu arquivo para a convenção de arquivos para Macintosh ou MS-DOS / MS-Windows. E isso não faz nada se o arquivo já estiver no formato correto.Para obter mais informações, consulte a ajuda do vim:
fonte
^M
caracteres.set fileformat=unix
ao meu arquivo .vimrc funcionou.:set fileformat=unix
converter de dos para unix.fonte
No Vim, isso retira todos os retornos de carro e deixa apenas novas linhas.
fonte
:%s/\r//g
, funcionou como um encanto.from: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
fonte
Converta diretório de arquivos dos para Unix
Usando a 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/7773170
também, como mencionado acima ^ M = Ctrl+V+ Ctrl+M(não digite apenas o símbolo "^" e M)
fonte
dos2unix
pode modificar diretamente o conteúdo do arquivo.Você pode usá-lo diretamente no arquivo, sem necessidade de redirecionamento temporário de arquivos.
O exemplo acima usa o teclado americano assumido. Use a
-
opção 437 para usar o teclado do Reino Unido.fonte
(consulte: http://kb.iu.edu/data/acux.html )
fonte
As etapas a seguir podem converter o formato do dos para unix:
Referência: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
fonte
Com o seguinte comando:
Obtenha o
^M
tipo de exibição CtrlVentão CtrlM. CtrlVdiz ao Vim para pegar o próximo caractere digitado literalmente.fonte
O comentário sobre como aparecer o ^ M é o que funcionou para mim. Apenas digitar "^ M" no meu vi não obteve nada (não encontrado). A sequência CTRL+ V CTRL+ Mfez perfeitamente embora.
Meu comando de substituição de trabalho foi
e ficou assim na minha tela:
fonte
:%s
vez do:1,$s
.%
é uma abreviação de1,$
.Encontrei uma maneira muito fácil: abra o arquivo com nano:
nano file.txt
Pressione CTRL+ Opara salvar, mas antes de pressionar Enter, pressione: ALT+ Dpara alternar entre finais de linha DOS e Unix / Linux ou: ALT+ Mpara alternar entre finais de linha Mac e Unix / Linux e, em seguida, pressione Enterpara salvar e CTRL+ Xpara sair.
fonte
^M
finais. salve como dos para manter, salve como linux para remover. pode verificar usandocat -v
CtrlMé o caractere
\r
ou retorno de carro que as terminações de linha do DOS adicionam. CtrlVdiz ao vim para inserir um CtrlMcaractere literal na linha de comando.Tomado como um todo, esse comando substitui tudo
\r
por nada, removendo-os do final das linhas.fonte
Você pode usar:
ou
dos2unix utility
.fonte
Você pode usar o seguinte comando:
:%s/^V^M//g
onde o '^' significa usar CTRLchave.
fonte
O comando abaixo é usado para reformatar todos os arquivos .sh no diretório atual, eu testei no meu sistema operacional Fedora.
fonte
No vim, digite:
Isso canalizará o conteúdo do seu buffer atual para o comando dos2unix e gravará os resultados sobre o conteúdo atual. O Vim solicitará que recarregue o arquivo após
fonte
Para rodar diretamente no console linux:
vim file.txt +"set ff=unix" +wq
fonte
Geralmente, existe um
dos2unix
comando que você pode usar para isso, apenas certifique-se de ler o manual, pois as versões GNU e BSD diferem em como elas lidam com os argumentos.Versão BSD:
Versão GNU:
Como alternativa, você pode criar suas próprias
dos2unix
com qualquer uma das respostas propostas aqui, por exemplo:fonte
Eu sabia que tinha visto isso em algum lugar. Aqui está a dica de login do FreeBSD:
Precisa remover todos esses caracteres ^ M de um arquivo DOS? Tentar
fonte
Embora esse tópico seja muito antigo, eu gostaria de colocar outro material da wikia:
esse preenchimento encontra todos os sinais de retorno de carro (um e mais representantes) até o final da linha e exclui, portanto
\n
, fica no eol.fonte
Esse é meu jeito. Abri um arquivo no DOS EOL e quando eu salvar o arquivo que será automaticamente convertido em EOL unix
fonte
se você criar um arquivo no NotePad ou NotePad ++ no Windows e trazê-lo para o Linux e abri-lo pelo vim, verá ^ M no final de cada linha. Para remover isso,
No seu terminal Linux, digite
Isso fará a mágica necessária.
fonte
Eu queria novas linhas no lugar dos ^ M's. Perl para o resgate:
Ou escreva para stdout:
fonte