Necesito buscar una variable PHP $someVar
. Sin embargo, Grep piensa que estoy tratando de ejecutar una expresión regular y se queja:
$ 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">>
No veo una opción para decirle a grep que no interprete la cadena como una expresión regular, sino que la incluya $
como otro carácter de cadena.
grep
interpretar$
como una expresión regular. Se trata de que el shell sustituya$someVar
el valor de la variable de entornosomeVar
, probablemente la cadena vacía. El segundo ejemplo no debería devolver todas las filas consomeVar
todas las líneas, porque la cadena vacía está en todas las líneas. Para decirle al caparazón que no sustituya, debe usar'$someVar'
o\$someVar
. Entonces tendrás que lidiar con lagrep
interpretación del$
personaje.Respuestas:
Escapa del
$
poniendo un\
delante de él.fuente
Utilice
fgrep
(obsoleto),grep -F
ogrep --fixed-strings
, para que trate el patrón como una lista de cadenas fijas, en lugar de una expresión regular.Como referencia, la documentación menciona (extractos):
Para obtener la referencia completa, consulte: https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html
fuente
addslashes()
en bash. Esta es la forma más sencilla de hacerlo.$
, por ejemplo:, de logrep -FR "unset(\$foo['bar'])"
contrario, cree que es una variable externa e intenta expandirlagrep -F
es una forma estándar de decirgrep
que interprete un argumento como una cadena fija, no como un patrón.fuente
Tienes que decirle a grep que usas una cadena fija, en lugar de un patrón, usando '-F':
fuente
En esta pregunta, el problema principal no se trata de
grep
interpretar$
como una expresión regular. Se trata de que el shell sustituya$someVar
el valor de la variable de entornosomeVar
, probablemente la cadena vacía.Entonces, en el primer ejemplo, es como llamar
grep
sin ningún argumento, y por eso te da unausage
salida. El segundo ejemplo no debería devolver todas las filas que contienen,someVar
sino todas las líneas, porque la cadena vacía está en todas las líneas.Para decirle al caparazón que no sustituya, debe usar
'$someVar'
o\$someVar
. Luego, tendrá que lidiar con la interpretación grep del$
personaje, de ahí lagrep -F
opción dada en muchas otras respuestas.Entonces, una respuesta válida sería:
fuente
+1 para la
-F
opción, será la respuesta aceptada. Además, tuve un comportamiento "extraño" al buscar el-I..
patrón en mis archivos, ya que-I
se consideró como una opción degrep
; para evitar este tipo de errores, podemos especificar explícitamente el final de los argumentos del comando usando--
.Ejemplo:
Espero que ayude a alguien.
fuente
--
se usa, ¿se-HnrF
puede omitir?-F
evita interpretar el patrón como una expresión regular, mientras que--
evita interpretar los elementos que le siguen como opciones de grep.