exibir e remover todos os caracteres ascii código 127

2

Como posso exibir e remover todos os caracteres > código ascii 127 de um arquivo?

O arquivo

é unicode de 16 bits

ATUALIZAÇÃO Dennis resolveu isso, mas há uma discussão interessante sobre intervalos de números.

    
por barlop 30.01.2011 / 07:10

2 respostas

1

Uma abordagem a ser adotada seria converter o arquivo em dígitos hexadecimais, remover os padrões de dígitos que você não deseja e, em seguida, converter de volta.

$ echo 'A Unicode character: [ñ]' | xxd -p | sed 's/c3b1//' | xxd -r -p
A Unicode character: []

Você pode usar o AWK ou qualquer outra técnica de manipulação de texto no lugar de sed . Tenha cuidado com sequências ambíguas.

Deixe-me saber se isso se aproxima do que você tem em mente.

    
por 30.01.2011 / 23:47
0

Olhando para esta questão

Parece que eu usei uma dessas linhas no final

(parece ser o regex de dennis)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/ /g" | sed -r "s/(00[8-9a-f][0-9a-f]|[0-9a-f][1-9a-f][0-9a-f][0-9a-f]|[1-9a-f]0[0-9a-f][0-9a-f])//g" | tr -d ' ' | sed "s/(.*)/feff/" | xxd -r -p >a.q2

ou isso (parece ser meu regex)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/ /g" | sed -r "s/(00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3})//g" | tr -d ' ' | sed "s/(.*)/feff/" | xxd -r -p >a.q2

este é um comentário sobre como eu trabalhei, com alguns testes.

0080-00FF     00[89A-F][0-9A-F]
0100-0FFF     0[1-9A-F][0-9A-F]{2}
1000-FFFF     [1-9A-F][0-9A-F]{3}

e aqui estão alguns testes que mostram que o regex funciona. Eu as coloquei na minha pergunta quando resolvi, mas deveria tê-las respondido.

Total de caracteres hexadecimais 85

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/
$ xxd -u -p a.aa.txt | sed -r "s/.{4}/
$ xxd -p -u a.aa.txt | sed -r "s/[0-9A-F]{4}/
$ xxd -u -p a.aa.txt | sed -r "s/.{4}/%pre% /g" | grep -oE "00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3}" | wc –l
13
/g" | grep -oP '((?!00[0-7][0-9A-F])(?=[^ ]).){4}' | wc -l 13
/g" | grep -oE "00[0-7][0-F]" | wc - l 72
/g" | grep -oE "[0-9A-F]{4}" | wc -l 85

Total que eu quero, 72

%pre%

Total que não quero, 13

%pre%

Total que não quero, 13

%pre%     
por 30.08.2014 / 20:07

Tags