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

Var*_*mar 165 linux grep

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

grep -r "0.49" *
Run Code Online (Sandbox Code Playgroud)

但是,什么情况是,我也越来越其中包含字符串,如不想要的结果0449,0949等等,.事情是linux,考虑点(.)作为任何字符,并带出所有结果.但我想得到的结果仅为"0.49".

gee*_*aur 202

grep使用正则表达式; .是指正则表达式中的"任何字符".如果你想有一个文本字符串,使用grep -F,fgrep或逃避.\..

  • 我需要像"\\."这样两次逃生才能工作.我正在使用zsh. (57认同)
  • 你也需要使用`\\ .`来表示bash,或者使用`"\."`来从shell中逃脱它. (14认同)
  • @NikosRenieris你用双引号包裹你的grepping字符串? (5认同)

Jon*_*oni 34

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


cod*_*ict 20

你需要逃避.as "0\.49".

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


Afr*_*Afr 7

这里有这么多的答案,提示逃生用点\.,但我一直在一遍又一遍地运行到这个问题:\.给我的结果相同.

但是,这两个表达式对我有用:

$ grep -r 0\\.49 *
Run Code Online (Sandbox Code Playgroud)

和:

$ grep -r 0[.]49 *
Run Code Online (Sandbox Code Playgroud)

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

编辑,或者,根据评论:

$ grep -r '0\.49' *
Run Code Online (Sandbox Code Playgroud)

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

  • 您需要从 shell 引用正则表达式,或者转义反斜杠本身,以便 shell 不使用它。`grep '\.'` 或 `grep \\.`(我强烈推荐前者。双引号也可以工作,就像在原始问题中一样;但单引号更容易理解和使用。例如,使用双引号,在某些情况下您仍然需要将反斜杠加倍)。 (3认同)
  • 我通常建议的是“始终用单引号引用正则表达式”。它并不“完整”,但它完成了工作,并意味着您要么需要理解引用,要么遵循这个简单的规则。 (2认同)

cpp*_*der 6

逃避吧 .

grep -r "0\.49"


tux*_*day 5

逃生点。示例命令将是。

grep '0\.00'
Run Code Online (Sandbox Code Playgroud)


ska*_*kan 5

您也可以使用“ [。]”

grep -r "0[.]49"
Run Code Online (Sandbox Code Playgroud)