Removendo caracteres com sed [duplicado]

1

Estou trabalhando no UNIX do AIX e tentando remover caracteres não imprimíveis do arquivo que os dados se parecem com Caucasian male lives in Arizona w/ fiancÃÂÃÂÃÂÃÂÃÂ no arquivo quando visualizo no Notepad ++ usando a codificação UTF-8. Quando tento visualizar o arquivo no unix, recebo ^ ▒▒ ^ ▒▒ ^ ▒▒ ^ ▒▒ ^ ▒▒ ^ ▒▒ em vez dos caracteres especiais.

Eu quero substituir todos esses caracteres especiais por espaço.

Eu tentei sed 's/[^[:print:]]/ /g' file mas ele não remove esses caracteres.Minha localização está listada abaixo quando eu corro locale -a

C
POSIX
en_US.8859-15
en_US.ISO8859-1
en_US

Eu até tentei sed -e 's/[^ -~]/ /g' file e ele não removeu os caracteres.

Eu vejo que outras respostas do stackflow usaram UTF-8 locale com o GNU sed e isso funcionou, mas eu não tenho essa localidade.

Também estou usando ksh .

    
por Auguster 25.09.2018 / 21:13

2 respostas

0

Se a localidade atual já usa UTF-8 como o conjunto de caracteres (e o arquivo é gravado usando esse conjunto de caracteres):

<file LC_ALL=C sed 's/[^ -~]//g'

Ou para incluir caracteres de controle no AIX sed:

<file LC_ALL=C sed "$(printf "s/[^[:print:]\t\r]//g")"
    
por 25.09.2018 / 23:55
0

Você pode usar o comando tr da seguinte forma:

tr -cd '[:print:]\t\r\n'

Explicação:

'[:print:]'
Any character from the '[:space:]' class, and any character that is not in the '[:graph:]' class
\r -- return
\t -- horizontal tab

Exemplos based on Centos 7: tr is GNU and UTF-8 encoding

$ echo "fiancÃÂÃÂÃÂÃÂÃÂ" | tr -cd '[:print:]\t\r\n'
fianc

$ echo "get ^▒▒^▒▒^▒▒^▒▒^▒▒^▒▒ " | tr -cd '[:print:]\t\r\n'
get ^^^^^^

echo " Caucasian male lives in Arizona w/ fianc▒^▒▒^▒▒^▒▒^▒▒^▒▒^▒^▒▒^▒▒^▒▒^▒▒^▒▒^▒"  | tr -cd '[:print:]\t\r\n'
 Caucasian male lives in Arizona w/ fianc^^^^^^^^^^^^
    
por 25.09.2018 / 21:23