Solução para arquivos com ^M no final de cada linha

Publicado por Rafael Brianezi da Silva em 27/08/2008

[ Hits: 12.458 ]

 


Solução para arquivos com ^M no final de cada linha



Você criou um arquivo texto no Windows, e ao abrí-lo no Linux apareceu um ^M no final de cada linha? Veja como usar o Perl para resolver!

Digite a linha de comando abaixo, em um prompt Linux:

perl -pi -e 's/\r/\n/g' arquivo.txt

Explicação sobre o comando:
  • perl - interpretador de comandos em si;
  • -p = faz a leitura de todos os argumentos como arquivos e faz um print de todas as linhas no fim do processamento de cada uma;
  • -i = edita os arquivos que recebe como argumento;
  • -e = executa a expressão informada a seguir;
  • 's/\r/\n/g' = s/string_atual/string_nova/g, onde:
    s = Significa "substitute", ou seja, é utilizado no formato s/// quando se deseja substituir uma string por outra;
    g = Significa que toda vez que for encontrada a "string_atual" no arquivo, esta será substituída pela "string_nova".

    Obs.: Caso o "g" não seja especificado, somente a primeira ocorrência encontrada sera substituída.

    \r = Representa o final de linha no padrão DOS/Windows;
    \n = Representa o final de linha no padrão Unix/Linux.

Caso você necessite aplicar este comando em muitos arquivos, segue abaixo uma sugestão. :)

find /diretório_arquivos -type f -exec perl -pi -e 's/\r/\n/g' {} \;

Onde:
  • find = Efetua a busca especificada;
  • /diretório_arquivos = Diretório que contém os arquivos;
  • -type f = Significa (file), ou seja, somente estaremos pesquisando somente em arquivos;
  • -exec = Executa um comando;
  • perl -pi -e 's/\r/\n/g' = Comando já explicado acima;
  • {} \; = Indica que o comando perl -pi -e 's/\r/\n/g' será aplicado em todos os arquivos que forem encontrados pelo comando find.

Outras dicas deste autor

Ubuntu - Destacando Aba Ativa no Gnome-Terminal

Instalando o IONCube Loader no Debian

Como testar se o SpamAssassin (antispam) e o ClamAV (antivírus) estão funcionando

Como instalar o slapt-get no Slackware 12.2 em menos de 2 minutos

Desvendando o comando DATE

Leitura recomendada

Descobrindo endereço IP do modem

Executando shutdown agendado para desligar seu micro

yum - Erro: Metadata file does not match checksum [Resolvido]

Atualizar ClamAV, atualizações (de segurança e sistema) e mostrar versão do Debian

Como copiar arquivos mantendo a estrutura de diretórios e sub-diretórios

  

Comentários
[1] Comentário enviado por removido em 27/08/2008 - 13:13h

bacana a dica. vou anotar.

embora quando crio arquivos de textos no win eu utilizo o notepad++ http://notepad-plus.sourceforge.net/

. que ja faz este servico, basta ir em FORMAT -> CONVERT TO UNIX FORMAT. há também uma aplicacao linux (dos2unix) que faz isso tb, embora nao tenha usado.

valeu

[2] Comentário enviado por viniciuscordeiro em 27/08/2008 - 13:52h

Quem se interessar em usar o dos2unix pra facilitar a vida, acabei de publicar um post no meu blog:

http://blog.viniciuscordeiro.com/

http://blog.viniciuscordeiro.com/2008/08/transformando-arquivos-para-formato-unix-dos/

[3] Comentário enviado por SMarcell em 27/08/2008 - 14:25h

Também pode-se utilizar o tr:

$ tr -s '\r' '\n' < arq.txt > novo_arq.txt


[4] Comentário enviado por gamont em 12/04/2009 - 23:56h

Só usando Vim.
:args *.txt (ou no shell: vim *.txt)
:argdo %s/^M$//ge | update

'args' carrega os arquivos.
'argdo' aplica os comandos em cada arquivo.
o primeiro comando substitue o carriage-return por nada
o segundo grava o arquivo, se houve alteração



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts