O que é `^ M` e como faço para me livrar dele?

Quando abro o arquivo no Vim, vejo ^M caracteres estranhos.

Infelizmente, o mecanismo de pesquisa favorito do mundo não funciona bem com caracteres especiais em consultas, então estou perguntando aqui:

  • O que é isso ^M personagem?

  • Como ele poderia estar lá?

  • Como faço para me livrar dele?

Comentários

  • It ‘ é um dígrafo de caractere de controle, para mais info: help digraph-table.
  • VS Code tem uma opção EOL na parte inferior que irá converter automaticamente um arquivo aberto.
  • @StackUnderflow ao usar VSCode, alterar as terminações de linha para LF ao trabalhar em arquivos Linux ajuda. Eu uso WSL … Um arquivo do Windows como $ profile não tem problemas com o arquivo Linux terminando em LF. Talvez o Win supere o Linux aqui.

Resposta

O ^M é um caractere de retorno de carro. Se você vir isso, provavelmente está olhando para um arquivo que se originou no mundo DOS / Windows, onde um fim de linha é marcado por um par de retorno de carro / nova linha, enquanto no mundo Unix, fim de linha é marcado por uma única nova linha.

Leia este artigo para obter mais detalhes e também a entrada da Wikipedia para nova linha .

Este artigo descreve como configurar o vim para editar arquivos de forma transparente com finalidades diferentes marcadores de linha.

Se você tiver um arquivo com ^M no final de algumas linhas e quiser se livrar deles, use no Vim:

:s/^M$// 

(Pressione Ctrl + V Ctrl + M para inserir que ^M.)

Comentários

  • Tente :%s/^M/\r/g em vez de remover ^M e substituir ^M pelo caractere de nova linha . Sem %, o comando se aplica apenas à linha atual. E me deparei com alguns exemplos em que ^M não está no final da linha, como The first line.^MThe second line.
  • Ou se você não ‘ t quer muitas quebras de linha que você poderia apenas fazer :%s/^M/
  • Se ‘ s apenas um retorno de carro por si só, que pode ser a quebra de linha clássica (pré-Unix) do Macintosh. Até mesmo alguns programas mais recentes como o Excel 2007 para Mac fazem isso por algum motivo.
  • @larsks Mas altap.cz/salamander/help/salamand/apêndice_txtfiles diz que ^M é usado no UNIX
  • Não tenho certeza se ‘ é algo na minha configuração do vim, mas tenho que digitar Ctrl+Q e, em seguida, Ctrl+M para que esse caractere seja gerado!

Resposta

Uma maneira mais simples de fazer isso é usar o seguinte comando:

dos2unix filename 

Este comando também funciona com padrões de caminho, por exemplo:

dos2unix path/name* 

Se não funcionar, tente usar um modo diferente:

dos2unix -c mac filename 
  • -c Defina o modo de conversão. Onde CONVMODE é um dos: ascii, 7bit, iso, mac com ascii sendo o padrão.

Comentários

  • +1 por mencionar o valor padrão do sinalizador -c e outras opções. Na primeira tentativa, o padrão não ‘ teve os resultados esperados. Com dos2unix -c max funcionou. dos2unix: converting file launch_me.sh to Unix format...
  • Pequeno utilitário incrível. Para ubuntu, apenas apt-get install dos2unix. Se precisar usá-lo recursivamente, você pode consultar esta solução aqui: stackoverflow.com/questions/11929461/… Eu tolamente o executei em cada diretório manualmente e só pensei em pesquisar após o fato.

Resposta

Isso funcionou para mim

:e ++ff=dos 

O comando: e ++ ff = dos diz ao Vim para ler o arquivo novamente, forçando o formato do arquivo DOS. O Vim removerá terminações de linha somente CRLF e LF, deixando apenas o texto de cada linha no buffer.

e, em seguida,

:set ff=unix 

e finalmente

:wq 

Comentários

  • obrigado! isso funcionou para mim, mas a solução aceita não.
  • ff se refere ao formato do arquivo? E sobre ++ff?
  • O comando: e ++ ff = dos diz ao Vim para ler o arquivo novamente, forçando o formato do arquivo DOS. O Vim removerá as terminações de linha somente CRLF e LF, deixando apenas o texto de cada linha no buffer.
  • Para aprender sobre ff, execute “: help ff ”
  • simples e eficaz . Não tenho certeza porque cat file1 > > file2 está introduzindo feeds de linha dos quando o arquivo 1 não ‘ em primeiro lugar

Resposta

A maioria dos sistemas operacionais UNIX tem um utilitário chamado dos2unix que converterá o CRLF em LF. As outras respostas cobrem a questão “o que são”.

Resposta

Outra maneira de se livrar dos retornos de carro é com o tr comando.

Tenho um pequeno script parecido com este

#!/bin/sh tmpfile=$(mktemp) tr -d "\r" <"$1" >"$tmpfile" mv "$tmpfile" "$1" 

Resposta

Você pode limpar isso com sed:

sed -e "s/^M$//" < infile > outfile 

O truque é como inserir o retorno de carro corretamente. Geralmente, você precisa digitar C-v C-m para inserir um retorno de carro literal. Você também pode colocar o sed em funcionamento com

sed -i.bak -e "s/^M$//" infile 

Resposta

Sed em – coloque a solução sem a necessidade de digitar o caractere especial (você pode copiar e funciona):

sed -i -e "s/\r//g" filename 

Explicação:

-i: in-place -e: regular expression \r: escaped carriage return /g: replace globally 

Comentários

  • O questionador já estava editando o arquivo com o VIM, observe. E havia uma sed resposta no local desde 2012.
  • Sim, mas faltava uma solução boa e funcional. A solução sed existente não ‘ funciona fora da caixa.
  • Dale Hagglund ‘ s em -place sed definitivamente funciona fora da caixa.
  • Bem, não para mim. Eu ‘ m no Ubuntu LTS 18.04.
  • Isso me ajudou a editar um arquivo no Alpine Linux de uma área de trabalho Windows que contaria Ctrl M como um retorno de linha, tornando as respostas acima ineficazes.

Resposta

O que é este ^ M?
O ^ M é um caractere de retorno de carro. Se você vir isso, provavelmente está olhando para um arquivo que se originou no mundo DOS / Windows, onde um fim de linha é marcado por um par de retorno de carro / nova linha, enquanto no mundo Unix, fim de linha é marcado por uma única nova linha.

Como poderia ter chegado lá?
Quando lá é a mudança no formato do arquivo.

Como faço para me livrar disso?
abra o seu arquivo com

vim -b FILE_PATH 

salve-o com o seguinte comando

:%s/^M//g 

Comentários

  • Você ‘ errou ao abrir seu filr com .
  • Esta resposta não adiciona nada às outras respostas. O primeiro parágrafo é uma cópia quase literal da resposta aceita. O código fornecido não salvará nada, mas apenas removerá todo retorno de carro caracteres de todas as linhas. E não tenho certeza de como abrir o arquivo no modo binário elp aqui.

Resposta

No meu caso,

Nada acima funcionou, eu tive um arquivo CSV copiado para a máquina Linux do meu mac e usei todos os comandos acima, mas nada ajudou, exceto o abaixo

tr "\015" "\n" < inputfile > outputfile 

Eu tinha um arquivo no qual ^ M caracteres foram colocados entre as linhas algo como abaixo

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico, 

Comentários

  • mac2unix -n inputfile outputfile ou, equivalentemente, dos2unix -c mac -n inputfile outputfile cuidará dessa situação.

Resposta

Você pode usar o Vim no modo Ex:

 ex -bsc "%s/\r//|x" file  
  1. -b modo binário

  2. % selecione todas as linhas

  3. s substituir

  4. \r retorno de carro

  5. x salvar e fechar

Resposta

Adicione a seguinte linha ao seu ~ / .vimrc

command! Tounix :call Preserve("1,$s/^M//") 

Então, quando você tiver um arquivo com as terminações de linha do Windows, execute o comando “: Tounix”.

Resposta

No passado, vi que até os arquivos de configuração não são analisados corretamente e reclamam de espaços em branco, mas se você vi e faça uma lista de conjuntos que não mostrará o espaço em branco, grep filename [[space]] mostrará ^ M

que “s quando dos2unix file ajudar

Comentários

  • Essa resposta não traz nada de novo, does2unix já é citado pelo menos em duas respostas bem mais antigas.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *