Verificando se o final de cada linha no arquivo está terminando com uma letra seguida por um número de 8 dígitos

2

Eu tenho um problema com a verificação se cada linha dos meus arquivos está terminando com uma letra (A-Z (always capital)) seguida por números de 8 dígitos (não importa qual). Então eu tenho vários arquivos e o conteúdo de cada arquivo é assim:

Nc1nc2cc3OCCOc3cc2s1 A10000001          
CCN(CC)C1CCN(Cc2cc(I)cc(I)c2O)CC1 B100000002
CCN(CC)C1CCN(Cc2cc(cc(I)c2O)C#CCO)CC1 C10000003

Existe sempre um espaço entre esta "string" e a letra com números. Portanto, neste exemplo B100000002 , há 9 dígitos após a carta. Desde que eu fiz a maioria das coisas manualmente, gostaria de verificar se em meus arquivos há erros. Alguém pode me ajudar com algum comando bash para que eu possa ver quais linhas têm um padrão diferente e incorreto?

Obrigado!

    
por sergio 14.05.2018 / 16:30

2 respostas

3

Você pode usar grep para obter as linhas que não seguem a regra:

grep -v ' [[:upper:]][0-9]\{8\}$' file*
    O espaço
  • corresponde a si mesmo
  • [[:upper:]] é correspondido por qualquer letra maiúscula
  • [0-9] corresponde a um dígito
  • \{8\} é um "quantificador", isso significa que a construção anterior deve ser repetida 8 vezes
  • $ corresponde no final da linha
  • -v mostra as linhas que não são correspondidas
por choroba 14.05.2018 / 16:54
0

você pode usar um regexp em perl:

grep -P ' [a-zA-Z]{1}[0-9]{8}$'

-P : for perl Expressão regular

: o regexp começa com um espaço, porque você quer um espaço antes da letra maiúscula

[a-zA-Z]{1} : Exatamente 1 letra minúscula ou minúscula do caractere alphbaetic (é possível remover a-z apenas para letras maiúsculas, ou seja, [A-Z] {1})

[0-9]{8} : exatamente 8 caracteres numéricos

$ : fim da linha

Se você quiser exibir as linhas que não correspondem ao padrão, basta adicionar a opção -v ao comando grep.

Se você deseja exibir números de linhas, adicione a opção -n .

grep -Pvn ' [a-zA-Z]{1}[0-9]{8}$'
    
por cmak.fr 14.05.2018 / 17:01