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