web-dev-qa-db-fra.com

caractère d'échappement utilisé dans grep

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?

1
Pankaj Pandey

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 ...

3
Zanna