-1

你能解释一下为什么正则表达式“grep -E '[^az]+$' testfile”也匹配只包含数字的行吗?

例如对于测试文件:

Hi
this 
is test file
123 456
asdf
ASDF

此表达式将匹配:

123 456
ASDF

同时 "grep ^[az]+$" 符合预期的匹配行:

this
asdf
4

3 回答 3

3

[^a-z]表示“不在范围内的任何字符a-z”。^字符类开头的反转[]字符类。

也许你的意思是^[a-z]+$

于 2013-07-26T04:30:57.517 回答
1

您的输出不正确。它只会匹配123 456^在字符类中使用[]是为了否定。

对于锚定,您需要^在字符类之外使用。

于 2013-07-26T04:33:53.860 回答
1

问题

  1. 如发布的那样,您的语料库有前导空格。
  2. 你的角色等级是错误的;你没有用克拉来锚定班级,你已经否定了班级。

解决方案

使用 POSIX 字符类来处理前导空格,以及仅匹配行其余部分的数字和空格。

$ grep -E '^[[:space:][:digit:]]+$' /tmp/corpus 
 123 456
于 2013-07-26T04:36:33.070 回答