Confundido sobre el límite de palabras

13

He estado investigando mucho sobre esto, pero todavía no lo tengo claro. ¿Qué significa límite de palabra ? ¿Qué hace?

Entonces, por ejemplo, ¿alguien podría explicarme este comando por favor?

egrep '\b[A-Z]+\b' filename.sh
usuario36683
fuente
1
Un "límite de palabras" es lo que la herramienta utilizada define como tal ... algunos consideran nospace / space o space / nospace un límite de palabras, otros consideran una "palabra" como compuesta [azA-Z0-9_]. Consulte el manual egrep(1), quizás la doumentation para las expresiones regulares en uso.
vonbrand

Respuestas:

12

Como se describe aquí , por ejemplo, coincide entre palabras:

Hay tres posiciones diferentes que califican como límites de palabras:

  1. Antes del primer carácter de la cadena, si el primer carácter es un carácter de palabra.
  2. Después del último carácter de la cadena, si el último carácter es un carácter de palabra.
  3. Entre dos caracteres en la cadena, donde uno es un carácter de palabra y el otro no es un carácter de palabra.

Aquí hay ejemplos de cada uno de esos casos:

  1. Para la cadena foobar, el primer caso coincide

     foobar
    ^-----here
    
  2. Para la cadena foobar, el segundo caso coincide

    foobar
          ^--here
    
  3. Para la cadena foo bar, el tercer caso coincidirá

    foo bar
       ^--here, because space is not a word character
    

Lo que califica como un carácter de palabra depende de la implementación específica de la expresión regular. Sin embargo, en todos los casos, las letras ( [a-z]y [A-Z]), los números ( [0-9]) y _se consideran caracteres de palabras.


Entonces, la expresión regular de ejemplo que publicó ( \b[A-Z]+\b) significa encontrar la cadena más larga que se encuentra entre los límites de dos palabras y que consiste solo en letras mayúsculas. Puede ser más fácil de explicar con un ejemplo:

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
terdon
fuente
Excelente explicación, solo tenga en cuenta que Solaris egrep(ni /usr/xpg4/bin/egrep) no trata de \besta manera. Por ejemplo, echo "FOOBAR" | egrep '\b[A-Z]+\b'no coincidiría.
Peter
0
egrep '\b[A-Z]+\b' filename.sh

Vamos a dividirlo:

  1. [A-Z]representa cualquier carácter en la clase de caracteres [ABCDEFGHIJKLMNOPQRSTUVWXYZ].
  2. [A-Z]+representa una o más ocurrencias de mayúsculas. Ejemplo partidos serían: A, HELLO, IS, I, ELEPHANT, etc.
  3. '\bINDIA\b': es exactamente como una PALABRA ENTERA para buscar la palabra INDIAen mayúscula. Sería NO coincidir INDIANA. Aplicando así el mismo principio: '\b[A-Z]+\b'buscaría palabras enteras que tengan una o más letras en mayúscula.
  4. Por egrep '\b[A-Z]+\b' filename.shlo tanto , buscaría palabras que tengan una o más letras todas en mayúscula en el archivo - filename.sh.

\b - Es exactamente como una búsqueda de palabras completas.

Sanket Rajgarhia
fuente