Respostas:
Conforme descrito aqui , por exemplo, ele combina entre palavras:
Existem três posições diferentes que se qualificam como limites de palavras:
- Antes do primeiro caractere na sequência, se o primeiro caractere for um caractere de palavra.
- Após o último caractere na sequência, se o último caractere for um caractere de palavra.
- Entre dois caracteres na sequência, em que um é um caractere de palavra e o outro não é um caractere de palavra.
Aqui estão exemplos de cada um desses casos:
Para a sequência foobar
, o primeiro caso corresponde
foobar
^-----here
Para a sequência foobar
, o segundo caso corresponde
foobar
^--here
Para a sequência foo bar
, o terceiro caso corresponderá
foo bar
^--here, because space is not a word character
O que se qualifica como um caractere de palavra depende da implementação específica da expressão regular. Em todos os casos, no entanto, letras ( [a-z]
e [A-Z]
), números ( [0-9]
) e _
são considerados caracteres de palavras.
Portanto, o exemplo de regex que você postou ( \b[A-Z]+\b
) significa encontrar a string mais longa entre dois limites de palavras e que consiste apenas em letras maiúsculas. Pode ser mais fácil explicar por exemplo:
echo "FOOBAR" | egrep '\b[A-Z]+\b' # Works
echo "FOO BAR" | egrep '\b[A-Z]+\b' # Works
echo "aFOOBARb" | egrep '\b[A-Z]+\b' # Does not work, we want capitals only
echo "12345" | egrep '\b[A-Za]+\b' # Does not work, no letters
echo "1FOOBAR2" | egrep '\b[A-Z]+\b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep '\b[A-Z]+\b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep '\b[A-Z]+\b' # Works, # and $ are not word chars
egrep
(nem /usr/xpg4/bin/egrep
) não trata \b
dessa maneira. Por exemplo, echo "FOOBAR" | egrep '\b[A-Z]+\b'
não corresponderia.
egrep '\b[A-Z]+\b' filename.sh
Vamos terminar:
[A-Z]
representa qualquer caractere na classe de caracteres
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
representa uma ou mais ocorrências de caracteres maiúsculos. Partidas exemplo seria: A
, HELLO
, IS
, I
, ELEPHANT
, etc.'\bINDIA\b'
: é exatamente como uma pesquisa de palavra INDIA
inteira em maiúsculas. Seria não corresponder INDIANA
. Assim, aplicar o mesmo princípio - '\b[A-Z]+\b'
procuraria palavras inteiras com uma ou mais letras maiúsculas.egrep '\b[A-Z]+\b' filename.sh
, procuraria por palavras com uma ou mais letras todas em maiúsculas no arquivo - filename.sh
.\b
- é exatamente como uma pesquisa de palavras inteira.
[azA-Z0-9_]
. Verifique o manualegrep(1)
, talvez a duplicação para as expressões regulares em uso.