我需要搜索PHP变量$someVar
.但是,Grep认为我正在尝试运行正则表达式并抱怨:
$ 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">>
Run Code Online (Sandbox Code Playgroud)
我没有看到一个选项,告诉grep 不要将字符串解释为正则表达式,而是将其包含$
为另一个字符串字符.
Has*_*kun 263
使用fgrep
(不建议使用)grep -F
或者grep --fixed-strings
,使其将模式视为固定字符串列表,而不是正则表达式.
供参考,文档提及(摘录):
-F
--fixed-strings
将模式解释为固定字符串列表(而不是正则表达式),由换行符分隔,其中任何一个都要匹配.(-F由POSIX指定.)
fgrep
是一样的grep -F
.不推荐直接调用fgrep,但提供它是为了允许依赖它们的历史应用程序不加修改地运行.
有关完整参考,请查看:https: //www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html
你必须告诉grep你使用固定字符串而不是模式,使用'-F':
grep -ir "Something Here" * | grep -F \$somevar
Run Code Online (Sandbox Code Playgroud)
在这个问题中,主要问题不在于grep
解释$
为正则表达式。这是关于 shell 替换$someVar
环境变量的值someVar
,可能是空字符串。
所以在第一个例子中,这就像grep
不带任何参数的调用,这就是为什么它会给你一个usage
输出。第二个示例不应返回包含someVar
但所有行的所有行,因为空字符串在所有行中。
要告诉外壳不要替换,您必须使用'$someVar'
或\$someVar
。然后你将不得不处理$
字符的 grep 解释,因此grep -F
在许多其他答案中给出了选项。
所以一个有效的答案是:
grep -ir "Something Here" * | grep '$someVar'
Run Code Online (Sandbox Code Playgroud)