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 -c
0-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