He estado investigando mucho sobre esto, pero todavía no lo tengo claro. ¿Qué significa límite de palabras ¿significar? ¿Qué hace?
Entonces, por ejemplo, ¿alguien podría explicarme este comando, por favor?
egrep 'b[A-Z]+b' filename.sh
Respuesta aceptada:
Como se describe aquí, por ejemplo, coincide con 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 coincidefoobar ^-----here
-
Para la cadena
foobar
, el segundo caso coincidefoobar ^--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]
), números ([0-9]
) y _
se consideran caracteres de palabras.
Entonces, la expresión regular de ejemplo que publicaste (b[A-Z]+b
) significa encontrar la cadena más larga que se encuentra entre dos límites de palabras y que consta solo de letras mayúsculas. Podría 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