grep 模式内的双方括号

grep 模式内的双方括号
grep "^[[:space:]]*clientPort[^[:alpha:]]" zoo.cfg

这是一个 grep 模式,用于从配置文件中提取包含端口号的行。

1)通常在正则表达式中,我使用方括号来匹配任何一个封闭的字符。我在这里看到了:alpha:。和[a-zA-Z]一样吗?

2)为什么正则表达式中有双方括号?

3) [^[:alpha:]]、方括号内的克拉符号是什么意思?

配置文件包含行,

clientPort=2181

答案1

正则表达式允许您使用括号表达式表示整理元素的集合。的语法Bracket Expression[...],您可以在其中放置...任何整理元素、整理符号、等价类、字符类或范围表达式。

您使用的alpha是字符类名称,由[:和之间的位置类名称组成:]。因此,您[:alpha:]在 之间使用了字符类表达式Bracket Expression [[:alpha:]]

[a-zA-Z]在某些语言环境中,字符类表达式与范围表达式不同。这是最好的例子你可以看到:

$ LC_ALL=en_US.utf8 bash -c 'case b in [A-Z]) echo yes; esac'
yes

使用字符类时什么也没有给你:

$ LC_ALL=en_US.utf8 bash -c 'case b in [[:upper:]]) echo yes; esac'

如果插入符号^位于 的开头,Bracket Expression则否定表达式的匹配。[^[:alpha:]]将匹配不属于[:alpha:]字符类的任何字符:

$ case 1 in [^[:alpha:]]) echo yes;; esac       
yes

相关内容