O que é '^ M' e como me livrar dele?

98

Quando abro o arquivo em vim , estou vendo estranhos ^M caracteres.

Infelizmente, o mecanismo de pesquisa favorito do mundo não se dá bem com caracteres especiais em consultas, por isso estou perguntando aqui:

  • O que é esse caractere ^M ?

  • Como poderia ter chegado lá?

  • Como posso me livrar disso?

por Christoph Wurm 18.02.2012 / 00:10

11 respostas

82

O ^M é um caractere de retorno de carro. Se você vir isso, provavelmente está vendo um arquivo originado no mundo DOS / Windows, em que 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 newline .

Este artigo discute como configurar o vim para editar arquivos com diferentes marcadores de fim de linha. p>

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

:s/^M$//

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

    
por 18.02.2012 / 00:14
36

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

    
por 18.02.2012 / 04:14
29

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 isso não funcionar, tente usar um modo diferente:

dos2unix -c mac filename
  • -c Defina o modo de conversão. Onde CONVMODE é um dos seguintes: ascii, 7bit, iso, mac com ascii sendo o padrão.
por 23.02.2012 / 18:30
13

Isso funcionou para mim

:e ++ff=dos 

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

então

:set ff=unix 

e finalmente

:wq 
    
por 06.12.2016 / 21:43
8

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

Eu tenho um pequeno script que se parece com isso

#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"$1" >"$tmpfile"
mv "$tmpfile" "$1"
    
por 18.02.2012 / 22:27
6

Você pode limpar isso com sed :

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

O truque é como inserir corretamente o retorno do carro. Geralmente, você precisa digitar C-v C-m para inserir um retorno de carro literal. Você também pode ter sed work no lugar com

sed -i.bak -e 's/^M$//' infile
    
por 18.02.2012 / 06:07
2

No meu caso,

Nada acima trabalhado, eu tinha um arquivo CSV copiado para a máquina Linux do meu mac e eu usei todos os comandos acima, mas nada ajudou além do abaixo

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

Eu tinha um arquivo em que ^ M caracteres foram trocados entre 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,
    
por 07.12.2016 / 09:45
1

O que é isso ^ M?
O ^ M é um caractere de retorno de carro. Se você vir isso, provavelmente está vendo um arquivo originado no mundo DOS / Windows, em que 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 há mudança no formato do arquivo.

Como posso me livrar disso?
abra seu arquivo com

vim -b FILE_PATH

salve com o seguinte comando

:%s/^M//g
    
por 21.11.2015 / 17:45
0

Você pode usar o Vim no modo Ex:

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

  2. % seleciona todas as linhas

  3. s substituto

  4. \r retorno de carro

  5. x salvar e fechar

por 17.04.2016 / 07:06
0

No passado, eu vi que arquivos de configuração pares não são analisados corretamente e reclamam de espaços em branco, mas se você vi e fizer um set list, ele não mostrará o espaço em branco, grep filename [[space]] mostrará a você ^ M

é quando dos2unix file ajuda

    
por 29.03.2017 / 20:57
0

Nenhuma das opções aqui funcionou para mim.

Finalmente abriu o arquivo no MS Word, e voila o ^ M desapareceu. Recorte e cole em qualquer outro editor de sua preferência.

    
por 03.03.2017 / 20:31