grep para palavras maiúsculas

6

Eu tenho um arquivo que tem declarações com palavras maiúsculas, algo como:

public final Foo BAR;

estas declarações não são todas uniformes. Existe uma maneira de eu conseguir apenas as palavras com letras maiúsculas da linha? Eu sei como encontrar linhas que tenham letras maiúsculas nelas, mas isso não é o que eu quero. Eu quero apenas a palavra com letras maiúsculas correspondente. Obrigado!

    
por Amir Afghani 07.11.2012 / 21:16

3 respostas

10

Na verdade, com a opção -o , o GNU grep retorna apenas o que correspondeu. Que tal:

grep -oP "\w*[A-Z]+\w*" yourfile.txt

Note que este regex irá combinar palavras com letras maiúsculas em qualquer lugar , não necessariamente o começo. Você deve ajustá-lo para atender às suas necessidades, caso elas sejam diferentes.

Como apontado abaixo, isso pode não ser a solução mais portátil. Uma alternativa portátil em Perl é

perl -nE 'say $1  while /(\w*[A-Z]+\w*)/g' yourfile.txt
    
por 07.11.2012 / 21:25
4

O padrão de expressão regular básica POSIX (usado por padrão em grep , vim , less , sed , etc.) usa \< e \> para indicar limites de palavras. Isso permite que uma carta siga o espaço em branco, além de caracteres não alfanuméricos, como cotações, traços, sinais de igual, etc. Use a opção -o para imprimir cada correspondência em uma nova linha, et voila:

grep -o '\<[A-Z][a-z]*\>' yourfile.txt

Novamente, talvez seja necessário alterar o regexp para atender às suas necessidades. Talvez, permitindo números ou uma segunda letra maiúscula ..? Isso faz os dois ..

grep -o '\<[A-Z][a-z0-9]*[A-Z][a-z0-9]*\>' yourfile.txt
    
por 08.11.2012 / 03:16
4

você pode usar sed para retornar apenas a string e não a linha inteira

sed 's/.*\([A-Z]*\).*//g' <file>

ou

sed 's/[a-z]*\| //g' <file>
    
por 07.11.2012 / 21:21

Tags