Você pode usar tr
para 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 , dos2unix
e unix2dos
, ou talvez dtou
e 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. unzip
Em 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.
dos2unix
usando o gerenciador de pacotes, é realmente muito mais simples e existe na maioria das plataformas.