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.

grepinterpretar$como una expresión regular. Se trata de que el shell sustituya$someVarel valor de la variable de entornosomeVar, probablemente la cadena vacía. El segundo ejemplo no debería devolver todas las filas consomeVartodas 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 lagrepinterpretación del$personaje.Respuestas:
Escapa del
$poniendo un\delante de él.fuente
Utilice
fgrep(obsoleto),grep -Fogrep --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 -Fes una forma estándar de decirgrepque 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
grepinterpretar$como una expresión regular. Se trata de que el shell sustituya$someVarel valor de la variable de entornosomeVar, probablemente la cadena vacía.Entonces, en el primer ejemplo, es como llamar
grepsin ningún argumento, y por eso te da unausagesalida. El segundo ejemplo no debería devolver todas las filas que contienen,someVarsino 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 -Fopción dada en muchas otras respuestas.Entonces, una respuesta válida sería:
fuente
+1 para la
-Fopción, será la respuesta aceptada. Además, tuve un comportamiento "extraño" al buscar el-I..patrón en mis archivos, ya que-Ise 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-HnrFpuede omitir?-Fevita interpretar el patrón como una expresión regular, mientras que--evita interpretar los elementos que le siguen como opciones de grep.