Como faço para me livrar de bytes estranhos desta saída?

1

Então, para a minha classe de estatísticas, eu tenho usado muitos truques do Linux para organizar meus números, copiar / colá-los, etc. Agora, eu não tive nenhum problema até recentemente ... eu tive copiei um monte de valores do Open Office (poderia ser o culpado), e estava tentando formatá-los assim ...

echo "5  8  6  25  4  21  10  1  24  12  4  16  
9  2  12  28  14  17  12  1  16  18  18  3  
12  6  6  12  10  20  9  6  8  6  8  15" | sed 's/\s\+/\n/g' | grep -v ^$ | sed 's/[[:space:]]*$//g' > test.txt

Isso colocaria cada número em sua própria linha, mas quando colei no statdisk, eu estava recebendo alguns erros de caractere inválidos. APARECEU ser um espaço, mas eu tentei usar sed e tr com varations em [: space:], [: blank:], e coisas como s / [\ t] * $ // g para tentar remover o que estava por trás no final (que eu poderia excluir muito bem no Vim). Mas nada na CLI funcionou.

A execução de um hexdump nesse arquivo me dá

5   �   �  \n   8   �   �  \n   6   �   �  \n   2   5   �   �

Que diabos são esses? hexdump -C

35 c2 a0 0a 38 c2 a0 0a  36 c2 a0 0a 32 35 c2 a0  |5...8...6...25..|

Alguém tem alguma idéia do que são esses c2 a0 bytes? Existe uma forma fácil / elegante de os eliminar com sed ou tr ou algo do género? Ou ser não-ascii eu precisaria fazer algo inteligente com manipulação de bytes ... Alguma idéia / sugestão?

    
por Arvandor 12.11.2015 / 04:15

1 resposta

1

c2a0 é UTF-8 U + 00A0 , NO-BREAK SPACE . Você poderia facilmente usar tr para removê-los, por exemplo,

> echo -n $'5\u00a0 8\u00a0 6' | tr -d $'\u00a0' | xxd
00000000: 3520 3820 36                             5 8 6

Observe que a saída \u só funciona no Bash 4.2+, mas é claro que você pode substituir por $'\xc2\xa0' .

    
por 12.11.2015 / 07:59

Tags