Eu não tenho certeza exatamente o que você quer dizer com "caracteres especiais", então eu vou assumir que você quer se livrar de não- ASCII caracteres. Existem algumas ferramentas diferentes que podem funcionar para você. Os primeiros que me vêm à mente são:
-
iconv(conversão de internacionalização) -
tr(traduzir) -
sed(editor de fluxo)
iconv (conversão de internacionalização)
Aqui está uma solução usando iconv :
iconv -c -f utf-8 -t ascii input_file.csv
O sinalizador -f ( de ) especifica um formato de entrada, o sinalizador -t ( para ) especifica um formato de saída e o sinal -c indica iconv para descartar caracteres que não podem ser convertidos no destino. Isso grava os resultados na saída padrão (ou seja, no seu console). Se você quiser gravar os resultados em um novo arquivo, você faria algo assim:
iconv -c -f utf-8 -t ascii input_file.csv -o output_file.csv
Então, se você quiser, pode substituir o arquivo original pelo novo arquivo:
mv -i output_file.csv input_file.csv
Veja como iconv manipula sua primeira string de exemplo:
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | iconv -c -f utf8 -t ascii
'W' , '', ''
tr (traduzir)
Aqui está uma solução usando o comando tr (translate) :
cat input_file.csv | tr -cd 'cat input_file.csv | tr -cd '$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | tr -cd 'sed 's/[\d128-\d255]//g' input_file.csv
0-7'
'W' , '', ''
0-7' > output_file.csv
0-7'
O padrão especifica o intervalo numérico 0-127 usando a notação octal . Este é o intervalo de valores para caracteres ASCII. O sinal -c0-7tr informa -d para corresponder valores no complemento desse intervalo (ou seja, para corresponder a caracteres não-ASCII) e o tr sinalizador informa tr executar exclusão (em vez de conversão).
Para gravar os resultados em um arquivo, use o redirecionamento de saída :
sed -i 's/[\d128-\d255]//g' input_file.csv
Veja como sed manipula sua primeira string de exemplo:
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | sed 's/[\d128-\d255]//g'
'W' , '', ''
s (editor de fluxo)
Aqui está uma solução usando sed :
iconv -c -f utf-8 -t ascii input_file.csv
O prefixo sed informa g para realizar a substituição, o sufixo sed informa [\d128-\d255] para corresponder padrões globalmente (por padrão, apenas a primeira ocorrência é correspondida), o padrão sed informa sed para corresponder caracteres com valores decimais no intervalo 128-255 (ou seja, caracteres não-ASCII), e a seqüência vazia entre a segunda e terceira barras diretas diz a sed para substituir padrões combinados com a seqüência vazia (ou seja, removê-los).
Ao contrário de muitos outros programas, sed tem uma opção para atualizar o arquivo no local (em vez de gravar manualmente em um arquivo diferente e depois substituir o original):
iconv -c -f utf-8 -t ascii input_file.csv -o output_file.csv
Veja como %code% manipula sua primeira string de exemplo:
mv -i output_file.csv input_file.csv