Como faço para extrair apenas caracteres alfanuméricos de um determinado arquivo de texto e imprimi-los?

3

Eu tenho um arquivo de texto que se parece com o texto colado abaixo. Eu quero extrair para um arquivo qualquer caractere que seja alfanumérico por natureza e ignorar todo o resto.

Qual é a maneira mais fácil de fazer isso ( grep , cut )?

%[{]$#{!^]^$#+*$}#*)(]!@^&#){][$)}!+%^)@#&!%(+^^($(%}^+[*)#+{%!))}(*&]__})][_))}#
%())#&##{]$#$](&$%&&$)^{(@%)$%()#)&&*{]&^^+%$##%{!(_$(**&(_]+{%[%$!_){$*@@++]&^$(
%@+{+&%]$)+@({$(+{!*#(%)]+[}){]]#)*[]%&{+)$){!&$]+^++_@]#%)[&&^%]#@#@)]@}%$[_*@%)
%[&*^*})@(!{&^#!([%@_![{)+)$}_+)%&^#@#$$}))^&)}({+*&_()&@]$^#(&&{){)_[}{@(}#)!)%&
%({+$[!#()[]%{$_*]*^%&]@{^@{)}}_^}@!^*)_[([{}]{*#{]&}}[$_[}!%%&_{{!$[}&[[@#[&_$()
%*_$+)&}*){${}!]+%[{{!+)+{!&]$!}{_]&)!!^+){&*#{@!##_(^%^$([!+&+($&)##[&[^_{##{(**
%{{)#*%@*[(^(}!%}@*}@+]^_}&&&}&{[$(@[#*+%[&%{$$**]]%(!$+$!]^+[^_(&*{#_^%[[#+{]#_[
%*}]#)!%!_[})^%*@{!{$)*_+$$*}%(&]%^+$@!&{[]}**})}#}[#{%{$#@##(])&)((${^]^[%^&(!_&
    
por jro 19.01.2016 / 01:21

2 respostas

1

Não vejo nenhum caractere alfanumérico, mas esse comando sed deve funcionar em sed 's/[^a-zA-Z0-9]//g' /tmp/foobar , em que /tmp/foobar é o arquivo de entrada.

s/a/b/ significa substituir qualquer instância de a por b, [^a-z] significa qualquer caractere que não seja a até z. s/a/b/g significa fazer isso globalmente, em vez de parar na primeira instância em cada linha, continue fazendo isso.

    
por 19.01.2016 / 01:47
1

Somente para caracteres alfanuméricos ASCII:

LC_ALL=C tr -cd '[:alnum:]' <file

Para caracteres alfanuméricos de acordo com sua localidade , apenas:

tr -cd '[:alnum:]' <file

ou definindo a localidade explicitamente:

LC_ALL=en_US.UTF-8 tr -cd '[:alnum:]' <file

(Uma exceção é o GNU tr, que não suporta caracteres com vários bytes atualmente)

    
por 19.01.2016 / 02:45