Réponses:
Comme décrit ici , par exemple, il correspond entre les mots:
Il existe trois positions différentes qui peuvent être considérées comme des limites de mots:
- Avant le premier caractère de la chaîne, si le premier caractère est un mot.
- Après le dernier caractère de la chaîne, si le dernier caractère est un mot.
- Entre deux caractères de 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 correspond
foobar
^-----here
Pour la chaîne foobar
, le deuxième cas correspond
foobar
^--here
Pour la chaîne foo bar
, le troisième cas correspondra
foo bar
^--here, because space is not a word character
Ce qui est qualifié de caractère de mot dépend de l'implémentation de l'expression régulière spécifique. Dans tous les cas cependant, les lettres ( [a-z]
et [A-Z]
), les chiffres ( [0-9]
) et _
sont considérés comme des caractères de mot.
Ainsi, l'exemple d'expression régulière que vous avez publié ( \b[A-Z]+\b
) signifie trouver la chaîne la plus longue qui se trouve entre deux limites de mot et qui se compose uniquement de lettres majuscules. Il pourrait être plus facile d'expliquer par l'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
egrep
(nor /usr/xpg4/bin/egrep
) ne traite pas de \b
cette façon. Par exemple, echo "FOOBAR" | egrep '\b[A-Z]+\b'
ne correspondrait pas.
egrep '\b[A-Z]+\b' filename.sh
Permet de le casser:
[A-Z]
représente n'importe quel caractère de la classe de caractères
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
représente une ou plusieurs occurrences de caractères majuscules. Matches exemple serait: A
, HELLO
, IS
, I
, ELEPHANT
, etc.'\bINDIA\b'
: est exactement comme une recherche de MOT ENTIER pour le mot INDIA
en majuscule. Cela ne correspondrait PASINDIANA
. Ainsi, appliquer le même principe - '\b[A-Z]+\b'
rechercherait des mots entiers ayant une ou plusieurs lettres en majuscules.egrep '\b[A-Z]+\b' filename.sh
rechercherait des mots ayant une ou plusieurs lettres tout en majuscule dans le fichier - filename.sh
.\b
- c'est exactement comme une recherche de mots entiers.
[azA-Z0-9_]
. Consultez le manuelegrep(1)
, peut-être la doumentation des expressions régulières utilisées.