J'ai fait beaucoup de recherches là-dessus, mais je ne suis toujours pas clair là-dessus. Que signifie limite de mots moyenne? À quoi ça sert ?
Donc, par exemple, quelqu'un pourrait-il m'expliquer cette commande s'il vous plaît ?
egrep 'b[A-Z]+b' filename.sh
Réponse acceptée :
Comme décrit ici, par exemple, il correspond à entre mots :
Il existe trois positions différentes qui sont considérées comme des limites de mots :
- Avant le premier caractère de la chaîne, si le premier caractère est un caractère de mot.
- Après le dernier caractère de la chaîne, si le dernier caractère est un caractère de mot.
- Entre deux caractères dans la chaîne, où l'un est un caractère de mot et l'autre n'est pas un caractère de mot.
Voici des exemples de chacun de ces cas :
-
Pour la chaîne
foobar
, le premier cas correspondfoobar ^-----here
-
Pour la chaîne
foobar
, le deuxième cas correspondfoobar ^--here
-
Pour la chaîne
foo bar
, le troisième cas correspondrafoo bar ^--here, because space is not a word character
Ce qui est considéré comme un caractère de mot dépend de l'implémentation spécifique de l'expression régulière. Dans tous les cas cependant, les lettres ([a-z]
et [A-Z]
), chiffres ([0-9]
) et _
sont considérés comme des caractères de mot.
Ainsi, l'exemple de regex que vous avez posté (b[A-Z]+b
) signifie trouver la chaîne la plus longue qui se trouve entre deux limites de mots et qui se compose uniquement de lettres majuscules. Il serait peut-être plus simple d'expliquer par un exemple :
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