我正在尝试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"