使用grep搜索包含点的字符串

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

grep -r "0.49" *

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

205638 次浏览

grep使用正则表达式;.表示正则表达式中的“任何字符”。如果你想要一个字面值字符串,使用grep -Ffgrep,或者将.转义为\.

别忘了用双引号把字符串括起来。否则你应该使用\\.

所以,你的命令需要是:

grep -r "0\.49" *

grep -r 0\\.49 *

grep -Fr 0.49 *

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

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

如。Grep -r "0\.49"

你需要将.转义为"0\.49"

.是一个正则表达式元字符,用于匹配任何字符(换行除外)。要匹配文字句点,您需要转义它。

逃逸点。示例命令将。

grep '0\.00'

只需转义.

grep -r "0\.49"

你也可以用“[.]”

grep -r "0[.]49"

这里有很多答案建议使用\.来转义点,但我已经一次又一次地遇到这个问题:\.给我的结果与.相同

然而,这两个表达对我来说很有用:

$ grep -r 0\\.49 *

和:

$ grep -r 0[.]49 *

我用的是“normal”;bash shell在Ubuntu和Archlinux。

编辑,或者,根据注释:

$ grep -r '0\.49' *

注意,-quotes在这里起区别作用。

你也可以用——option搜索,它会忽略所有的特殊字符,grep不会解释它。

$ cat foo |grep -- "0\.49"