你能解释一下为什么正则表达式“grep -E '[^az]+$' testfile”也匹配只包含数字的行吗?
例如对于测试文件:
Hi
this
is test file
123 456
asdf
ASDF
此表达式将匹配:
123 456
ASDF
同时 "grep ^[az]+$" 符合预期的匹配行:
this
asdf
[^a-z]
表示“不在范围内的任何字符a-z
”。^
字符类开头的反转[]
字符类。
也许你的意思是^[a-z]+$
?
您的输出不正确。它只会匹配123 456
。^
在字符类中使用[]
是为了否定。
对于锚定,您需要^
在字符类之外使用。
使用 POSIX 字符类来处理前导空格,以及仅匹配行其余部分的数字和空格。
$ grep -E '^[[:space:][:digit:]]+$' /tmp/corpus
123 456