Você pode usar trpara converter do DOS para o Unix; no entanto, você só poderá fazer isso com segurança se o CR aparecer no seu arquivo apenas como o primeiro byte de um par de bytes CRLF. Este é geralmente o caso. Você então usa:
tr -d '\015' <DOS-file >UNIX-file
Observe que o nome DOS-fileé diferente do nome UNIX-file; se você tentar usar o mesmo nome duas vezes, acabará sem dados no arquivo.
Você não pode fazer o contrário (com o padrão 'tr').
Se você souber inserir retorno de carro em um script ( control-V, control-Mpara inserir control-M), então:
sed 's/^M$//' # DOS to Unix
sed 's/$/^M/' # Unix to DOS
onde o '^ M' é o caractere control-M. Você também pode usar o mecanismo de bash cotação ANSI-C para especificar o retorno de carro:
sed $'s/\r$//' # DOS to Unix
sed $'s/$/\r/' # Unix to DOS
No entanto, se você precisar fazer isso com muita frequência (mais de uma vez, grosso modo), é muito mais sensato instalar os programas de conversão (por exemplo , dos2unixe unix2dos, ou talvez dtoue utod) e usá-los.
Se você precisar processar diretórios e subdiretórios inteiros, poderá usar zip:
zip -r -ll zipfile.zip somedir/
unzip zipfile.zip
Isso criará um arquivo zip com as terminações de linha alteradas de CRLF para CR. unzipEm seguida, os arquivos convertidos serão restaurados (e você solicitará arquivo por arquivo - você poderá responder: Sim para todos). Créditos para @vmsnomad por apontar isso.
dos2unixusando o gerenciador de pacotes, é realmente muito mais simples e existe na maioria das plataformas.