grep regexp [A-Z] retorna dígitos

0

Eu tenho o arquivo a.txt com seu conteúdo como

1 (C##2)
2 (C##U)

e usando grep nele

cat a.txt | grep '##[A-Z]*'    
1 (C##2)    
2 (C##U)

Por que o número 1 (C##2) aparece neste resultado do grep? Eu queria apenas um segundo para aparecer. Então, eu especifiquei [A-Z] . Por que foi necessário ..##2 como correspondência?

    
por mandrake00 20.11.2018 / 06:34

1 resposta

5

[A-Z]* é zero ou mais ocorrências de [A-Z] . Há zero ocorrências de [A-Z] em ##2 , portanto, a linha corresponde. Você provavelmente deseja um ou mais ( \{1,\} (ou \+ com GNU grep ou compatível) ou + com a opção -E habilitando EREs) ou simplesmente ##[A-Z] como se correspondesse a ##[A-Z] , também corresponde a ##[A-Z]+ e vice-versa.

Observe também que, exceto na C / POSIX locale, o que é correspondido por [A-Z] não é especificado e a lista de caracteres (ou até mesmo possíveis elementos de agrupamento feitos de vários caracteres) varia de acordo com a localidade e sistema operacional. Nos sistemas GNU, geralmente são apenas caracteres do script latino (incluindo Dž ou É ), muitas vezes apenas letras maiúsculas, mas às vezes também minúsculas, incluindo as letras inglesas az (como no idioma tailandês para a Tailândia no Ubuntu 18.04 finalmente). Você obtém listas muito mais exóticas em alguns sistemas não-GNU como o Solaris. Para corresponder apenas a ABCDEFGHIJKLMNOPQRSTUVWXYZ, use [ABCDEFGHIJKLMNOPQRSTUVWXYZ] .

    
por 20.11.2018 / 06:43

Tags