小编dba*_*tes的帖子

为什么我必须在 grep 的正则表达式中引用转义字符,而不是在在线正则表达式引擎上?

我确定这个问题的某些版本之前已经被问过和回答过,但我环顾四周并没有找到确切的答案。也许这里有人可以帮我点亮灯泡。我在 Mac 上使用 Mojave 10.14.6 和 bash 3.2.57(1)-release。

我正在通过在线教程学习正则表达式的基础知识,并在在线网站https://regexr.com上练习,并grep在我的本地机器上使用bash。

我正在练习一个包含三个内容的小文本文件(称为 small.txt):

9.00
9-00
9500
Run Code Online (Sandbox Code Playgroud)

我知道.通配符将匹配该位置的任何一个字符。因此,在我使用的在线正则表达式引擎 (JavaScript) 中, /9.00/g将匹配所有三个字符串9.00 9-009500.

如果我grep在命令行上使用也是一样的:

~/bin $ grep 9.00 small.txt
9.00
9-00
9500
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。教程说,要将.元字符转换为文字,您必须对其进行转义。好的。所以放入/9\.00/g在线正则表达式框只会匹配9.00,正如预期的那样,而不是 9-00 或 9500。太好了。

但是,如果我grep在命令行中输入相同的语法,则会得到意想不到的结果:

~/bin $ grep 9\.00 small.txt
9.00
9-00
9500
Run Code Online (Sandbox Code Playgroud)

和之前一样。为了开始grep工作,我要么必须双引号整个字符串:

~/bin $ grep "9\.00" small.txt
9.00
Run Code Online (Sandbox Code Playgroud)

或者只是双引号转义字符:

~/bin $ grep 9"\."00 small.txt
9.00
Run Code Online (Sandbox Code Playgroud)

很可能还有其他一些我可以做出的引用选择,这也会给我正确的结果。

这让我很难理解正则表达式的基础知识,因为很明显,我首先必须了解 …

grep bash regular-expression

11
推荐指数
2
解决办法
1265
查看次数

标签 统计

bash ×1

grep ×1

regular-expression ×1