Confuso sobre o limite de palavras


13

Eu tenho pesquisado muito isso, mas ainda não estou claro. O que significa limite de palavras? O que isso faz?

Então, por exemplo, alguém poderia me explicar esse comando, por favor?

egrep '\b[A-Z]+\b' filename.sh

1
Um "limite de palavras" é o que a ferramenta usada define como tal ... alguns consideram nospace / espaço ou espaço / nospace um limite de palavras, outros consideram uma "palavra" como composta [azA-Z0-9_]. Verifique o manual egrep(1), talvez a duplicação para as expressões regulares em uso.
vonbrand

Respostas:


12

Conforme descrito aqui , por exemplo, ele combina entre palavras:

Existem três posições diferentes que se qualificam como limites de palavras:

  1. Antes do primeiro caractere na sequência, se o primeiro caractere for um caractere de palavra.
  2. Após o último caractere na sequência, se o último caractere for um caractere de palavra.
  3. 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:

  1. Para a sequência foobar, o primeiro caso corresponde

     foobar
    ^-----here
    
  2. Para a sequência foobar, o segundo caso corresponde

    foobar
          ^--here
    
  3. 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

Excelente explicação, observe que o Solaris egrep(nem /usr/xpg4/bin/egrep) não trata \bdessa maneira. Por exemplo, echo "FOOBAR" | egrep '\b[A-Z]+\b'não corresponderia.
Peter

0
egrep '\b[A-Z]+\b' filename.sh

Vamos terminar:

  1. [A-Z]representa qualquer caractere na classe de caracteres [ABCDEFGHIJKLMNOPQRSTUVWXYZ].
  2. [A-Z]+representa uma ou mais ocorrências de caracteres maiúsculos. Partidas exemplo seria: A, HELLO, IS, I, ELEPHANT, etc.
  3. '\bINDIA\b': é exatamente como uma pesquisa de palavra INDIAinteira 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.
  4. Assim 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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.