Remover carriage return de arquivos no Linux

Carlos MorenoCarlos Moreno
3 min read

Ao se deparar com probremas de carriage return em um arquivo no linux, temos algumas opções para resolver tal problema, este post busca mostrar como resolver o mesmo com o uso do comando sed.

Para a explicação adiante, será utilizado o arquivo disk_report.sh

Uma breve explicação sobre o problema

Ao ser desenvolvido um Shell Script e usado o caractere de final de linha do tipo CRLF ocorrerá problemas durante a sua execução, visto que tal padrão não pertence ao padrão POSIX, para contornar isso, deverá ser realizado a sua substituição para o caractere de final de linha do tipo LF.

Verificando se é um problema de carriage return mesmo

Antes de apresentar como isso pode ser resolvido com o comando sed, acho interessante explicar uma maneira simples de saber se o problema que você está enfrentando está relacionado ao final de linha mesmo, para isso, podemos utilizar um dos comandos abaixos e obter a resposta para essa dúvida.

  • Quando for um arquivo pequeno, pode ser utilizado diretamente o comando cat com a sua opção -e, ficando a execução do mesmo conforma abaixo:

      cat -e disk_report.sh
    

    Se for identificado alguma linha terminando com ^M$ é sinal que o problema ou um dos problemas (pode ser que o script contenha outras falhas) apresentados é referente a quebra de linha que está sendo utilizada.

    Como exemplo, o script utilizado foi salvo usando o padrão CRLF e a saída do comando acima foi:

  • Se for um arquivo grande, com muitas linhas, é mais inteligente utilizar uma chamada mais elaborada do que ficar procurando alguma linha que termine com ^M$, para isso, o comando abaixo pode ser utilizado.

      cat -e disk_report.sh | if grep -q '\^M\$'; then echo "Existe ^M$"; fi
    

    Se for encontrado alguma linha problemática, a mensagem Existe ^M$ será retornada.

    Para exemplo, a saída do comando acima no script usado para fins de teste será:

Agora que já sabemos qual final de linha usar ao certo e identificar se algum arquivo possui o final de linha errado, vamos demonstrar utilizando o comando sed como fazer para solucionar esse problema.

Resolvendo o problema com o comando sed

O comando abaixo apresenta uma instrução do comando sed para realizar a substituição no arquivo problemático e assim deixar o mesmo apto a ser executado sem problemas relacionado ao final de linha ^M$

sed -i 's/\r$//' disk_report.sh

A saída do comando acima para o script de exemplo será:

Percebam que após a execução do comando sed o arquivo foi corrigido e as linhas não terminam mais com ^M$ e sim com $

Lembrando que caso você esteja em um diretório com vários arquivos com esse problema, basta utilizar o caractere curinga que o sed irá realizar a substituição desses arquivos com apenas uma chamada.

sed -i 's/\r$//' *.sh

Espero ter ajuda e por hoje é isso.

Abaixo seguem as documentações dos comandos utilizados.

Sucesso a todos!

0
Subscribe to my newsletter

Read articles from Carlos Moreno directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Carlos Moreno
Carlos Moreno