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
^Mpersonagem? -
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/gem vez de remover^Me substituir^Mpelo caractere de nova linha . Sem%, o comando se aplica apenas à linha atual. E me deparei com alguns exemplos em que^Mnã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+Qe, em seguida,Ctrl+Mpara 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
-
-cDefina o modo de conversão. Onde CONVMODE é um dos:ascii, 7bit, iso, maccomasciisendo 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 maxfuncionou.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.
-
ffse 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
sedresposta 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
seddefinitivamente 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 outputfileou, equivalentemente,dos2unix -c mac -n inputfile outputfilecuidará dessa situação.
Resposta
Você pode usar o Vim no modo Ex:
ex -bsc "%s/\r//|x" file
-
-bmodo binário -
%selecione todas as linhas -
ssubstituir -
\rretorno de carro -
xsalvar 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.