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
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
Respuestas:
Como se describe aquí , por ejemplo, coincide entre palabras:
Hay tres posiciones diferentes que califican como límites de palabras:
- Antes del primer carácter de la cadena, si el primer carácter es un carácter de palabra.
- Después del último carácter de la cadena, si el último carácter es un carácter de palabra.
- 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:
Para la cadena foobar
, el primer caso coincide
foobar
^-----here
Para la cadena foobar
, el segundo caso coincide
foobar
^--here
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
egrep
(ni /usr/xpg4/bin/egrep
) no trata de \b
esta manera. Por ejemplo, echo "FOOBAR" | egrep '\b[A-Z]+\b'
no coincidiría.
egrep '\b[A-Z]+\b' filename.sh
Vamos a dividirlo:
[A-Z]
representa cualquier carácter en la clase de caracteres
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
representa una o más ocurrencias de mayúsculas. Ejemplo partidos serían: A
, HELLO
, IS
, I
, ELEPHANT
, etc.'\bINDIA\b'
: es exactamente como una PALABRA ENTERA para buscar la palabra INDIA
en 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.egrep '\b[A-Z]+\b' filename.sh
lo 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.
[azA-Z0-9_]
. Consulte el manualegrep(1)
, quizás la doumentation para las expresiones regulares en uso.