J'ai besoin de rechercher une variable PHP $someVar
. Cependant, Grep pense que j'essaye d'exécuter une regex et se plaint:
$ grep -ir "Something Here" * | grep $someVar
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
$ grep -ir "Something Here" * | grep "$someVar"
<<Here it returns all rows with "someVar", not only those with "$someVar">>
Je ne vois pas d'option pour dire à grep de ne pas interpréter la chaîne comme une expression régulière, mais d'inclure le $
comme un autre caractère de chaîne.
grep
interpréter$
comme une regex. Il s'agit de la substitution du shell$someVar
par la valeur de la variable d'environnementsomeVar
, probablement la chaîne vide. Le deuxième exemple ne doit pas renvoyer toutes les lignes avecsomeVar
mais toutes les lignes, car la chaîne vide se trouve dans toutes les lignes. Pour dire au shell de ne pas se substituer, vous devez utiliser'$someVar'
ou\$someVar
. Ensuite, vous devrez vous occuper de l'grep
interprétation du$
personnage.Réponses:
Échappez au
$
en mettant un\
devant lui.la source
Utilisez
fgrep
(obsolète),grep -F
ougrep --fixed-strings
, pour qu'il traite le modèle comme une liste de chaînes fixes, au lieu d'une expression régulière.Pour référence, la documentation mentionne (extraits):
Pour la référence complète, consultez: https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html
la source
addslashes()
dans bash. C'est la manière la plus simple de le faire.$
grep -FR "unset(\$foo['bar'])"
grep -F
est un moyen standardgrep
d'interpréter l'argument comme une chaîne fixe et non comme un modèle.la source
Vous devez dire à grep que vous utilisez une chaîne fixe, au lieu d'un modèle, en utilisant '-F':
la source
Dans cette question, le principal problème n'est pas d'
grep
interpréter$
comme une regex. Il s'agit de la substitution du shell$someVar
par la valeur de la variable d'environnementsomeVar
, probablement la chaîne vide.Donc, dans le premier exemple, c'est comme appeler
grep
sans aucun argument, et c'est pourquoi cela vous donne uneusage
sortie. Le deuxième exemple ne doit pas renvoyer toutes les lignes contenantsomeVar
mais toutes les lignes, car la chaîne vide se trouve dans toutes les lignes.Pour dire au shell de ne pas se substituer, vous devez utiliser
'$someVar'
ou\$someVar
. Ensuite, vous devrez vous occuper de l'interprétation grep du$
caractère, d'où l'grep -F
option donnée dans de nombreuses autres réponses.Une réponse valable serait donc:
la source
+1 pour l'
-F
option, ce sera la réponse acceptée. De plus, j'ai eu un comportement "étrange" lors de la recherche du-I..
modèle dans mes fichiers, car l '-I
était considéré comme une option degrep
; pour éviter ce genre d'erreurs, nous pouvons spécifier explicitement la fin des arguments de la commande en utilisant--
.Exemple:
J'espère que cela aidera quelqu'un.
la source
--
est utilisé, peut-HnrF
être omis?-F
évite d'interpréter le motif comme une expression régulière, tout en--
évitant d'interpréter les éléments qui le suivent comme des options de grep.