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
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, comoThe 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
comascii
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
-
-b
modo binário -
%
selecione todas as linhas -
s
substituir -
\r
retorno de carro -
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.
help digraph-table
.