Como Remover CTRL-M (^M) de arquivos

Publicado por Carlos APC em 16/08/2022

[ Hits: 3.140 ]

 


Como Remover CTRL-M (^M) de arquivos



Opa! Esse problema geralmente ocorre quando se edita um arquivo no Windows e se passa para o Linux depois, com isso dependendo do editor usado e também no que está sendo aberto o arquivo no Linux, com isso teremos alguns "lixos" no fim de cada linha, o que pode ou não causar problemas, como visto há muitas variáveis...

Por isso, é uma dica rápida e fácil de ver isso e como corrigir.

Ver o problema de fato

Aqui temos um arquivo que foi editado no Windows e depois seria usado para um pequeno script com for, aonde o problema aparece. Para vermos o "problema", podemos usar o "cat" com a parâmetro "-v", vicando assim:

cat -v lista1.txt |head -n3
xxxx@1111^M
YYY@22222^M
ZZZ@333^M


E esse "^M" em cada linha causa um problema (mas depende do que e aonde será usado como já informado), no meu caso, de um script com for, gerou problema.

Explicação

File has been transferred between systems of different types with different newline conventions. For example, Windows-based text editors will have a special carriage return character (CR+LF) at the end of lines to denote a line return or newline, which will be displayed incorrectly in Linux (^M). This can be difficult to spot, as some applications or programs may handle the foreign newline characters properly while others do not. Thus some services may crash or not respond correctly. Often times, this is because the file is created or perhaps even edited on a Microsoft Windows machine and then uploaded or transferred to a Linux server. This typically occurs when a file is transferred from MS-DOS (or MS-Windows) without ASCII or text mode.

O arquivo foi transferido entre sistemas de diferentes tipos com diferentes convenções de nova linha. Por exemplo, editores de texto baseados em Windows terão um caractere especial de retorno de carro (CR+LF) no final das linhas para indicar um retorno de linha ou nova linha, que será exibido incorretamente no Linux (^M). Isso pode ser difícil de detectar, pois alguns aplicativos ou programas podem manipular corretamente os caracteres de nova linha estrangeiros, enquanto outros não. Assim, alguns serviços podem falhar ou não responder corretamente. Muitas vezes, isso ocorre porque o arquivo é criado ou talvez até editado em uma máquina Microsoft Windows e depois carregado ou transferido para um servidor Linux. Isso normalmente ocorre quando um arquivo é transferido do MS-DOS (ou MS-Windows) sem ASCII ou modo de texto.

Para correção há várias formas

Via software dos2unix:

dos2unix filename

Via Sed:

Novo arquivo final:

sed -e "s/ //g" file > newfile

Ou aplicando no arquivo original (no quente):

sed -i "s/ //g" file

Via Perl:

perl -p -e 's/ //g' file > newfile

Era isso então, até mais.

Fonte: How to remove CTRL-M (^M) characters from a file in Linux

Outras dicas deste autor

Apache + PHP no Antergos (Arch Linux)

Acessar site do Itaú (Banco) de qualquer Linux [2016]

YouTube sem som em vídeo HTML5 no Firefox [Resolvido]

Proxy no Google Chrome e Vivaldi

Ingressar (join) CentOS 7 em domínio Samba 4 + SSH + sudo

Leitura recomendada

Visualizando o cache do Firefox

[SAMBA 4 ADDC] Listando Nome e Nome Completo de Usuários de um grupo

Instalando o htop no Oracle Linux Server 7 a partir do código fonte

Varnishlog - Não inicia com "varnishlog start" no shell [RESOLVIDO]

Interligar dois servidores Asterisk

  

Comentários
[1] Comentário enviado por fabio em 16/08/2022 - 02:09h

Boa!!! Como eu sempre uso o VIM, costumo resolver dentro dele mesmo, com o comando:

:%s/^M//g

O "^M" no VIM pode ser gerado com a combinação das teclas: Ctrl v Ctrl m

[2] Comentário enviado por maurixnovatrento em 23/10/2022 - 14:01h


Boas soluções.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts