正则表达式[:digit:]和[[:digit]]的区别

时间:2017-10-14 19:27:42

标签: regex grep

我目前正在学习正则表达式。我遇到了一个问题,我无法在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:]的第一种情况下,文件中的所有行都被返回。

1 个答案:

答案 0 :(得分:3)

POSIX字符类必须用括号表达式包装。

[:lower:]模式是一个正括号表达式,匹配单个字符:lower

[[:lower:]]模式是一个正括号表达式,它匹配与[:lower:] POSIX字符类匹配的任何字符(匹配任何小写字母)。

请参阅grep manual

  

某些命名的字符类是在括号表达式中预定义的 ...请注意,这些类名中的括号是符号名称的一部分,除了括号括起括号之外,还必须包括它们表达

     

如果您错误地省略了外括号,并搜索了说,[:upper:],GNU grep会打印一个诊断并退出状态为2,前提是您不打算搜索名义上等效的正则表达式: [:epru]