grep para palabras capitales

Tengo un file que tiene declaraciones con palabras capitales, algo así como:

public final Foo BAR; 

estas declaraciones no son todas uniformes. ¿Hay alguna manera de agotar solo las letras mayúsculas de la línea? Sé cómo encontrar líneas que tengan letras mayúsculas, pero eso no es lo que quiero. Solo quiero la palabra con letras mayúsculas correspondiente. ¡Gracias!

En realidad, con el -o , GNU grep solo devuelve lo que ha coincidido. Qué tal si:

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

Tenga en count que esta expresión regular coincidirá con las palabras con mayúsculas en cualquier lugar de ellas, no necesariamente al principio. Debe ajustarlo para satisfacer sus necesidades si difieren.

Como se señala a continuación, esta podría no ser la solución más portátil. Una alternativa portátil en Perl es

 perl -nE 'say $1 while /(\w*[AZ]+\w*)/g' yourfile.txt 

El estándar de expresión POSIX Basic Regular (usado por defecto en grep , vim , less , sed , etc.) usa \< y \> para indicar los límites de las palabras. Esto permite que una letra siga al espacio en blanco, así como a los caracteres no alfanuméricos como comillas, guiones, signos iguales, etc. Utilice la opción -o para imprimir cada coincidencia en una nueva línea, et voila:

 grep -o '\<[AZ][az]*\>' yourfile.txt 

De nuevo, es posible que necesite cambiar la expresión regular para que se ajuste a sus necesidades. Tal vez al permitir numbers o una segunda letra mayúscula …? Esto hace ambas cosas ..

 grep -o '\<[AZ][a-z0-9]*[AZ][a-z0-9]*\>' yourfile.txt 

podrías usar sed para solo devolver la cadena y no toda la línea

 sed 's/.*\([AZ]*\).*/\1/g' <file> 

o

 sed 's/[az]*\| //g' <file>