sh-4.3$ grep "hi +hello"
sh-4.3$ grep "hi +hello" test
sh-4.3$ grep "hi \+hello" test
hi hello
hi hello
sh-4.3$ grep "hi *hello" test
hi hello
hihello
hi hello
sh-4.3$
Dans le code ci-dessus, le caractère d'échappement est requis avec le caractère regex '+', mais l'utilisation du caractère d'échappement '*' n'est pas obligatoire.
Quelqu'un peut-il expliquer la raison de cela?
La norme GNU grep
reconnaît BRE (expressions rationnelles de base) et *
est un métacaractère d'origine dans BRE alors que +
est une extension de BRE. Pour que +
soit reconnu comme métacaractère dans le BRE, il doit être échappé. Cependant, si vous dites à grep
d'utiliser ERE (expressions rationnelles étendues) à l'aide de l'indicateur -E
, vous n'avez pas besoin d'échapper à un métacaractère (si vous y échappez, ils deviendront littéraux). Il y a un peu d'explication dans le manuel de grep et voici un aperçu plus détaillé
$ grep -E 'hi +hello' test
hi hello
hi hello
Vous pouvez également utiliser egrep
$ egrep 'hi +hello' test
hi hello
hi hello
Je décide d'utiliser BRE ou ERE en fonction du nombre total de barres obliques inverses que je devrai taper ...