2010-09-09 7 views

Répondre

37

Cela dépend. Si vous utilisez régulièrement grep, vous n'échappe pas:

echo '(foo)'|grep '(fo*)' 

Vous avez en fait d'échapper si vous voulez utiliser les parenthèses que le regroupement.

Si vous utilisez extended regular expressions, vous n'échapper:

echo '(foo)'|grep -E '\(fo*\)' 
+1

Lorsque j'utilise grep -rin init() * dans le répertoire, il se plaint d'une erreur de syntaxe près d'un jeton inattendu (Comment résoudre ce problème –

+0

Je suis désolé, je ne comprends pas J'ai quelques fichiers javascript, avec un La fonction init() est appelée dans quelques endroits, je veux savoir où tout init() est appelé, en utilisant grep -rin init() * dans le répertoire .. Il se plaint d'une syntaxe invalide près de (. –

+3

@Megha, juste pour clarifier, c'était une erreur de shell parce que vous n'avez pas cité la regex –

4
$ echo "init()" | grep -Erin 'init\([^)]*\)' 
1:init() 

$ echo "init(test)" | grep -Erin 'init\([^)]*\)' 
1:init(test) 

$ echo "initwhat" | grep -Erin 'init\([^)]*\)' 
+0

Ceci est incorrect. Il va tout aussi bien correspondre à "initwhatever", car par défaut les backslashed parens créent des groupes de capture. Comme je l'ai dit plus haut, vous n'échappez pas aux parens avec grep régulier. –

+0

Je crois que c'est bien parce que le '-E' est équivalent à egrep. – gkanwar

1

Déplacer vers votre répertoire racine (si vous savez où les fichiers JavaScript sont). Ensuite, faites ce qui suit.

grep 'init()' *.js 
+0

afin de grep dans tous les sous-dossiers récursivement, suggérer ajouter le paramètre -r – hejiaming007

18

Si vous voulez rechercher exactement la chaîne "init()" puis utilisez fgrep "init()" ou grep -F "init()".

Les deux feront une correspondance de chaîne fixe, c'est-à-dire traiteront le motif comme une chaîne de caractères à rechercher et non comme une regex. Je crois que c'est aussi plus rapide que de faire une recherche regex.

Questions connexes