0

我要在文件中查找第五个字符是数字的行。也就是说,在数字集 {0123456789} 中。我制作了一个文件,其中包含:

asdf1
asdf2

.. 依此类推,直到 0。我用特殊字符和其他符号制作了更多案例,以确保我也没有抓住这些行。

然而,有一件事让我很感兴趣。制作线时:

SSSSS3

或者

TTTTTS7

也就是说,如果每个 S 是一个空格,而 T 是一个制表符,那么当第五个字符是空格/制表符而不是数字时,也会检索该行。

有人可以解释为什么会这样吗?我正在使用的模式是

'....[0-9](.)*'

如果我没记错的话,一个'。代表任何字符,对吧?超过 4 个制表符或空格怎么会算作少于 5 个 '.'?

4

1 回答 1

3

您缺少行首锚点:

^....[0-9]

没有它,egrep执行正则表达式搜索而不是正则表达式匹配,就好像您输入了

.*....[0-9]

尽管不同之处在于.*不会导致捕获诸如-o.

(请注意,(.)*末尾的 也是无用的。.*隐式附加到 RE 的末尾,除非您放入行尾锚,$.)

于 2012-05-22T15:05:29.623 回答