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.
[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
[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