Linux slogan
Visite também: BR-Linux.org · Dicas-L · NoticiasLinux · SoftwareLivre.org · UnderLinux · BestLinux
» Screenshot



» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha

» Wallpaper

Dica

Solução para arquivos com ^M no final de cada linha
Linux user
Publicado por Rafael Brianezi da Silva em 27/08/2008

Login: raf-tiger, 51677 pontos Homepage:
[ Hits: 1245 ]

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

Leitura recomendada
   Dica Linux recomendada Achando o pacote de um arquivo
   Dica Linux recomendada flags de comando para ls
   Dica Linux recomendada Limitando velocidade de download
   Dica Linux recomendada Problema de display com root!
   Dica Linux recomendada Personalizando comandos

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
  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Copyleft© 2002-2009 Viva o Linux.com.br

Viva o Linux

A maior comunidade Linux do Brasil! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.