Grep不是正则表达式

dot*_*hen 78 linux grep

我需要搜索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 -FR "unset(\$foo['bar'])"`,否则它认为它是一个外部变量并试图扩展它 (2认同)

rkh*_*rov 53

grep -F告诉grep我们将参数解释为固定字符串而不是模式是一种标准方法.


hue*_*ois 8

你必须告诉grep你使用固定字符串而不是模式,使用'-F':

grep -ir "Something Here" * | grep -F \$somevar
Run Code Online (Sandbox Code Playgroud)


Chr*_*uet 5

在这个问题中,主要问题不在于grep解释$为正则表达式。这是关于 shell 替换$someVar环境变量的值someVar,可能是空字符串。

所以在第一个例子中,这就像grep不带任何参数的调用,这就是为什么它会给你一个usage输出。第二个示例不应返回包含someVar但所有行的所有行,因为空字符串在所有行中。

要告诉外壳不要替换,您必须使用'$someVar'\$someVar。然后你将不得不处理$字符的 grep 解释,因此grep -F在许多其他答案中给出了选项。

所以一个有效的答案是:

grep -ir "Something Here" * | grep '$someVar'
Run Code Online (Sandbox Code Playgroud)


Mr *_*ter -5

通过在它前面$加上一个来逃避它。\