Como posso excluir tudo, exceto um padrão alfanumérico?

0

Eu também tenho um arquivo com muitos caracteres especiais e indesejados. Quero manter um padrão alfanumérico específico e ignorar todo o resto - por exemplo, AB123456789 - quero extrair apenas esta palavra-chave, ou seja, dois alfabetos "AB" seguidos de 9 números.

ENTRADA DE AMOSTRA:

[{"u_affected_cis": "m324nkj43nkj3n4kj34n", "número": "hhggjjiiijjjf", "akdsfj_skdfj": "", "as_group": "1,324kj3k4j3k4jk34", "pedido": "", "__ status": "sucesso "," fase ":" gfhgh "," cmdb_ci ":" 0989iujlkj "," u_benefit_organization ":" "," u_creating_group ":" luiy98798yukuh "," work_notes_list ":" "," prioridade ":" 4 "," u_tier4_location ":" ", review_date": "", "u_mf_batch_inst_opdoc_move": "", "u_requesting_group": "kjhljlkjhlkuh098709kjh", "business_duration": "", "número": " AB123456789 ", " requested_by ": tgfgtf878789khgo7869876ff9007da158c", "u_temp", "change_plan": "", "asd_def": "2023-02-10 11:58:21", "implementation_plan": "", "short_description": "data", " u_alternate_programmer_work_number ":" "," work_start ":" "," u_assignment_group_updated ":" "," yy_uhggfjk ":" "," fds ":" mudança_request "," closed_by ":" abcdef "," start_date ":" 2023- 02-10 "}]

SAÍDA DE AMOSTRA:

AB123456789

    
por Koshur 10.02.2017 / 16:30

4 respostas

2

Se a sua entrada real for um JSON válido, você seria mais bem atendido por um Ferramenta compatível com JSON, como jq:

jq -r '.[0].number'.

(Eu digo "se", porque a entrada que você postou não é válida como JSON é faltando uma aspa dupla e uma das chaves não tem nenhum valor ligado a isto; Eu suponho que a ruptura pode ter acontecido quando você estava se preparando a questão.)

    
por 10.02.2017 / 18:51
0

Se o seu arquivo tem sempre o mesmo número de campos e seu padrão aparece no mesmo local (por exemplo: coluna 72), você pode usar um simples awk:

awk -F "\"" '{print $72}' input-file.txt

Parece que uma correspondência de padrão não é adequada para você porque você tem o mesmo padrão (AF123456789) no início do arquivo.

Espero que esta resposta ajude você.

    
por 10.02.2017 / 19:14
0

Algum sed deve fazer o trabalho:

sed -e '/AB[0-9]\{9\}/!d' -e 's/.*\(AB[0-9]\{9\}\).*//'
    
por 10.02.2017 / 19:33
-1

Eu criei esses arquivos para replicar uma escala menor do que você está fazendo:

┌─[root@Fedora]─[~/stack_exchange]─[03:38 pm]
└─[$]› ls
1234fnjfck   CA123456789      EA123456789  HA123456789  KA123456789   NA123456789  QA123456789  TA123456789              VA123456789  YA123456789
AA123456789  DA123456789      FA123456789  IA123456789  LA123456789  OA123456789  RA123456789  testing-please-delete-me  WA123456789  ZA123456789
BA123456789  DELETE1234  GA123456789  JA123456789  MA123456789  PA123456789  SA123456789  UA123456789              XA123456789

uma variável regex correspondente ao padrão será capaz de manipular os arquivos desejados que não correspondem ao padrão em um loop for in, com uma instrução if:

┌─[root@Fedora]─[~/stack_exchange]─[04:07 pm]
└─[$]› pattern="^[A-Z][A-Z][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$"

[$]› for i in $(ls ~/stack_exchange); do if ! [[ $i =~ $pattern ]]; then echo "$i does not match!"; fi; done
1234fnjfck does not match!
DELETE1234 does not match!
testing-please-delete-me does not match!

Então, para excluí-los:

[$]› for i in $(ls ~/stack_exchange); do if ! [[ $i =~ $pattern ]]; then rm -f $i; fi; done

resultado:

[$]› ls
AA123456789  CA123456789  EA123456789  GA123456789  IA123456789  KA123456789  MA123456789  OA123456789  QA123456789  SA123456789  UA123456789  WA123456789  YA123456789
BA123456789  DA123456789  FA123456789  HA123456789  JA123456789  LA123456789  NA123456789  PA123456789  RA123456789  TA123456789  VA123456789  XA123456789  ZA123456789
    
por 10.02.2017 / 17:26