Accorging à la documentation GNU:
‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.
Mon / etc / fstab ressemble à ceci:
/dev/sdb1 /media/fresh ext2 defaults 0 0
Je veux que grep renvoie TRUE / FALSE pour l'existence de / media / fresh. J'ai essayé d'utiliser \<
et \>
mais cela n'a pas fonctionné. Pourquoi?
egrep '\</media/fresh\>' /etc/fstab
Solution de contournement:
egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab
Mais ça a l'air plus laid.
Mon grep est 2.5.1
grep
regular-expression
Felipe Alvarez
la source
la source
/
n'est pas considéré comme un caractère de mot, donc l'expression régulière ne correspondra pas - "\ b correspond avant et après une séquence alphanumérique" est plus exact que de dire "avant et après un mot"Réponses:
\<
et faire\>
correspondre respectivement une chaîne vide au début et à la fin d'un mot et seuls les caractères constitutifs du mot sont:De
man grep
:Donc, votre Regex échoue car ce
/
n'est pas un caractère constitutif de mot valide.Au lieu de cela, comme vous avez des espaces, vous pouvez utiliser l'
-w
option degrep
pour faire correspondre un mot:Exemple:
la source
Ce problème avec
\<
(et aussi\b
) s'applique non seulement à/
, mais à tous les caractères non verbaux. (c'est-à-dire des caractères autres que[[:alnum:]]
et_
.)Le problème est que le moteur d'expression régulière contournera toujours un caractère non-mot comme
/
lors de la recherche de l'ancre suivante\<
. C'est pourquoi vous ne devez pas mettre de caractères non verbaux comme/
juste après\<
. Si vous le faites, par construction, rien ne correspondra.Une alternative à l'
-w
option grep serait quelque chose comme ceci:la source