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