我正在尝试使用命令
搜索字符串0.49
(带点)
grep -r "0.49" *
但发生的事情是,我也收到了不需要的结果,其中包含0449
,0949
等字符串。事情是linux,考虑点(。)作为任何字符,并带出所有结果。但我想得到的结果仅为“0.49”。
答案 0 :(得分:185)
grep
使用正则表达式; .
表示正则表达式中的“任何字符”。如果您需要文字字符串,请使用grep -F
,fgrep
或将.
转义为\.
。
不要忘记用双引号括起你的字符串。否则你应该使用\\.
答案 1 :(得分:33)
grep -F -r '0.49' *
将0.49视为“固定”字符串而不是正则表达式。这使得.
失去了它的特殊含义。
答案 2 :(得分:19)
您需要将.
转义为"0\.49"
。
.
是一个正则表达式元字符,用于匹配任何字符(换行符除外)。要匹配文字句号,您需要将其转义。
答案 3 :(得分:6)
逃避.
grep -r "0\.49"
答案 4 :(得分:4)
您可以使用\
转义点和其他特殊字符例如。 grep -r“0 \ .49”
答案 5 :(得分:4)
您还可以使用" [。]"
grep -r "0[.]49"
答案 6 :(得分:3)
逃脱点。示例命令将是。
grep '0\.00'
答案 7 :(得分:3)
这里有很多答案建议用\.
来逃避点,但我一遍又一遍地遇到这个问题:\.
给我的结果与.
<相同/ p>
然而,这两个表达对我有用:
$ grep -r 0\\.49 *
和
$ grep -r 0[.]49 *
我在Ubuntu和Archlinux上使用“普通”bash shell。
答案 8 :(得分:0)
您还可以使用-选项进行搜索,该选项基本上会忽略所有特殊字符,并且不会由grep解释。
$ cat foo |grep -- "0\.49"