我正在尝试0.49使用命令搜索字符串(带点)
grep -r "0.49" *
但是发生的事情是我也得到了不需要的结果,其中包含诸如0449等字符串0949。问题是 linux 将 dot(.) 视为任何字符并显示所有结果。但我只想得到“0.49”的结果。
grep使用正则表达式;.表示正则表达式中的“任何字符”。如果您想要文字字符串,请使用grep -F,fgrep或转义.to \.。
不要忘记将字符串用双引号括起来。否则你应该使用\\.
因此,您的命令需要是:
grep -r "0\.49" *
或者
grep -r 0\\.49 *
或者
grep -Fr 0.49 *
grep -F -r '0.49' *将 0.49 视为“固定”字符串而不是正则表达式。这使得.它失去了它的特殊意义。
您需要转义.as "0\.49"。
A.是匹配任何字符(换行符除外)的正则表达式元字符。要匹配文字句点,您需要对其进行转义。
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' *
请注意,单引号在这里有所不同。
您也可以使用“[.]”
grep -r "0[.]49"
只是逃避.
grep -r "0\.49"
逃生点。示例命令将。
grep '0\.00'
您可以使用 \ 转义点和其他特殊字符
例如。grep -r "0\.49"
您也可以使用 -- 选项进行搜索,该选项基本上会忽略所有特殊字符,并且不会被 grep 解释。
$ cat foo |grep -- "0\.49"