我在 Ubuntu 10.10 上使用 GNU grep 2.6.3 并且正在复习我的正则表达式技能以准备即将到来的培训课程,并且在以下方面受到了意想不到的打击。
我有一个名为 strings.regex.txt 的文件,其内容如下:
STRING1 Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
STRING2 Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)
这个 grep 命令:
grep 'x[0-9A-Z]' strings.regex.txt
结果是:
STRING1 Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
STRING2 Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)
我期望这是结果:
STRING2 Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)
谁能解释为什么我会得到上述结果?grep 输出的第一行不包含正则表达式 x[0-9A-Z] 的匹配项。它会在 x[0-9a-z] 或 x[0-9A-Za-z] 或许多其他正则表达式上匹配。我学习和理解正则表达式的方式。它不应该匹配。
以下是一些额外的 grep 命令和结果输出:
grep -o 'x[0-9A-Z]' strings.regex.txt
x2
(我预料到了这一点,它支持我目前对正则表达式的理解。)
grep -oc 'x[0-9A-Z]' strings.regex.txt
2
(我没想到会这样。我期待 1。)
grep -c 'x[0-9A-Z]' strings.regex.txt
2
(我没想到会这样。我期待 1。)