Como deixar apenas determinados caracteres em um arquivo?

1

P: Como posso deixar apenas os seguintes caracteres em um arquivo?

  • o decimal ASCII 10, o ENTER, então o chamado "line feed"
  • caracteres imprimíveis ASCII (código de caractere 32-127)
  • Os códigos ASCII estendidos (código de caractere 128-255)

Precisamos limpar arquivos de texto que contenham muitos tipos de lixo.

Exemplo de caracteres de lixo:

ATUALIZAÇÃO:

$ printf 'árvíztűrő tükörfúrógép\n'
árvíztűrő tükörfúrógép
$ 
$ printf 'árvíztűrő tükörfúrógép\n' | tr -dc '[\x0A\x20-\xFF]' && echo
rvtrtkrfrgp
$ 
    
por evachristine 19.03.2014 / 07:27

3 respostas

2

O que você realmente quer é isso:

% strings -e S ./hello

Na página de manual:

For each file given, GNU strings prints the printable character sequences that are at least 4 characters long (or the number given with the options below) and are followed by an unprintable character.

Como você tem caracteres não-ASCII: A opção -e S diz que strings procura caracteres de 8 bits em vez do padrão (ASCII regular). Obviamente, aumenta a frequência de extração de strings aleatórias que parecem como texto de 8 bits.

Se você está trabalhando apenas com executáveis compilados (como parece na sua captura de tela), olhe para a página de manual; As strings são projetadas para extrair strings do código compilado, por isso tem várias opções projetadas em torno desse cenário.

    
por 20.03.2014 / 11:53
0

Você pode usar perl :

perl -Mutf8 -ple 's/\P{IsPrint}//g' file
    
por 19.03.2014 / 07:37
0
$ head -c 500 /bin/ls | tr -dc '[\x0A\x20-\xFF]' && echo
ELF>E@@p@8@@@@@@88@8@@@aaaaTT@T@DDPtdggAgAQtd
    
por 19.03.2014 / 10:22

Tags