egrep "^[^A-Z]*[A-Z]{5,6}[^A-Z]*$" .filename
Eu preciso do meu grep para retornar linhas que tenham exatamente 5 ou 6 letras maiúsculas.
Fazer egrep [A-Z]{5,6} .filename
retorna palavras de 5 e 6 letras, mas também, infelizmente, também mais palavras com letras do que isso.
Então, por exemplo, nesta lista:
ASK
roger ROBERT gulliver
tom THOMAS
JONATHAN moore
MELISSA tenant
Preciso que ele retorne apenas ROBERT e THOMAS.
Experimente:
egrep '^[A-Z]{5,6}$'
em que ^
e $
correspondem ao início e ao final da linha, respectivamente.
Ainda outra versão
a) limitado a 5 ou 6 casos superiores na palavra;
b) a palavra pode ter letras minúsculas ilimitadas, mais o '-' e o apóstrofo: '
c) usa o caractere de borda da palavra \ b (largura zero);
Isto encontra mais do que a sua lista (que você gostaria) e segue todas as limitações que você declara. Isso pode resultar em mais do que você esperava, pois também permite o número de letras minúsculas entre as letras maiúsculas:
"\b[a-z'-]([A-Z][a-z'-]){5,6}\b"
Encontrará: impressionante JET-LI
Jane DeSILVA
Mas não: old MacDONALD