Alterar os términos de linha e a codificação do arquivo ao mesmo tempo

0

Eu tenho alguns arquivos com finais de linha do Windows e codificação latin-1 que eu preciso converter para finais de linha unix e utf-8.

Claro que posso

for file in ./*.csv; do
    sed s'/^M//' "$file" > "${file}.bak"
    iconv -f iso-8859-1 -t utf8 "${file}.bak" > "$file"
    rm "${file}.bak"
done

Mas há uma ferramenta comumente disponível que pode fazer as duas coisas ao mesmo tempo? Talvez esta não seja a maneira mais eficiente. (Talvez iconv?)

    
por George Simms 11.07.2015 / 11:57

1 resposta

0

Eu faria algumas pequenas modificações no seu script. Primeiro, não use ls no seu loop for , use *.csv porque o glob manipulará caracteres não imprimíveis e espaços nos nomes dos arquivos. Em vez de usar o redirecionamento inplace do sed para $file.bak . Se strings estiver disponível em seu sistema, substitua sed por strings . E lembre-se sempre de citar variáveis.

    for file in *.csv
    do    sed 's/^M//' "$file" > "${file}.bak"
         #strings "$file" > "${file}.bak"
          iconv -f -iso-8859-1 -t utf8 "${file}.bak" > "$file"
          rm "${file}.bak"
    done 
    
por 11.07.2015 / 14:21