233

我正在尝试0.49使用命令搜索字符串(带点)

grep -r "0.49" *

但是发生的事情是我也得到了不需要的结果,其中包含诸如0449等字符串0949。问题是 linux 将 dot(.) 视为任何字符并显示所有结果。但我只想得到“0.49”的结果。

4

9 回答 9

285

grep使用正则表达式;.表示正则表达式中的“任何字符”。如果您想要文字字符串,请使用grep -F,fgrep或转义.to \.

不要忘记将字符串用双引号括起来。否则你应该使用\\.

因此,您的命令需要是:

grep -r "0\.49" *

或者

grep -r 0\\.49 *

或者

grep -Fr 0.49 *
于 2012-04-27T07:52:00.577 回答
37

grep -F -r '0.49' *将 0.49 视为“固定”字符串而不是正则表达式。这使得.它失去了它的特殊意义。

于 2012-04-27T07:52:16.653 回答
22

您需要转义.as "0\.49"

A.是匹配任何字符(换行符除外)的正则表达式元字符。要匹配文字句点,您需要对其进行转义。

于 2012-04-27T07:52:22.473 回答
8

There are so many answers here suggesting to escape the dot with \. but I have been running into this issue over and over again: \. gives me the same result as .

However, these two expressions work for me:

$ grep -r 0\\.49 *

And:

$ grep -r 0[.]49 *

我在 Ubuntu 和 Archlinux 上使用“普通”的 bash shell。

编辑,或者根据评论:

$ grep -r '0\.49' *

请注意,引号在这里有所不同。

于 2018-01-18T15:50:23.617 回答
7

您也可以使用“[.]”

grep -r "0[.]49"
于 2017-03-21T14:04:02.673 回答
6

只是逃避.

grep -r "0\.49"

于 2012-04-27T07:53:27.590 回答
5

逃生点。示例命令将。

grep '0\.00'
于 2012-04-27T07:52:45.267 回答
4

您可以使用 \ 转义点和其他特殊字符

例如。grep -r "0\.49"

于 2012-04-27T07:52:18.837 回答
1

您也可以使用 -- 选项进行搜索,该选项基本上会忽略所有特殊字符,并且不会被 grep 解释。

$ cat foo |grep -- "0\.49"
于 2019-11-18T07:17:48.407 回答