我目前正在学习正则表达式。我遇到了一个问题,我无法在stackoverflow上找到答案,我希望有人可以帮忙找到答案。
我在mac OS系统中使用vim,vim显示该行。 如果文件" regular_expression.txt"是:
"Open Source" is a good mechanism to develop programs.
You are the No. 1.
然后
grep -n '[:lower:]' regular_expression.txt
将返回
1:"Open Source" is a good mechanism to develop programs.
2:You are the No. 1.
命令
grep '[[:lower:]]' regular_expression.txt
将返回
2:You are the No. 1.
我无法理解上述差异,因为在我看来[:lower:]是一组较低的字符。 [[:lower:]]应与[:lower:]相同。同样令人困惑的是,在使用[:lower:]的第一种情况下,文件中的所有行都被返回。
答案 0 :(得分:3)
POSIX字符类必须用括号表达式包装。
[:lower:]
模式是一个正括号表达式,匹配单个字符:
,l
,o
,w
,e
或r
。
[[:lower:]]
模式是一个正括号表达式,它匹配与[:lower:]
POSIX字符类匹配的任何字符(匹配任何小写字母)。
请参阅grep
manual:
某些命名的字符类是在括号表达式中预定义的 ...请注意,这些类名中的括号是符号名称的一部分,除了括号括起括号之外,还必须包括它们表达
如果您错误地省略了外括号,并搜索了说,
[:upper:]
,GNU grep会打印一个诊断并退出状态为2,前提是您不打算搜索名义上等效的正则表达式:[:epru]
。