regular expression engine
描述匹配模式的特殊字符和一般字符组成;
BRE POSIX 基本正则表达式, ERE 扩展正则表达式; gawk 支持 ERE , sed 不支持。
1) 正则表达式模式:
l 区分大小写
l 空格作为普通字符处理
l 工具或语言中的使用模式常为 /pattern/
特殊字符: .*[]^${}/+?|()
正斜扛也需要转义,虽然它不是特殊字符——因为 / 被用作表示模式?
如 sed -n '/^abc/p' ; ^ 必须放到正则表达式的最前,否则作为普通字符
sed -n '/abc$/p' ;
eg: 查找整行 , '/^this$/p' ;查找空行 '/^$/d';
匹配换行符外的任何单字符,必须有一个字符;
character class (几个字符之一),如 sed -n '/[Yy]es/p'
否定字符类,使用 [^] ,如 [^ch] ,表示不含这几个字符,但是仍然需要一个字符;
定义字符范围,如 [0-9] , [a-z] ,[ a-cx-z ]定义多个范围
[[:alpha:]] 任意字母字符,大小写
[[:alnum:]] 任意字母、数字
[[:blank:]] 空格或制表符
[[:digit:]] 数字
[[:lower:]] 任意小写
[[:print:]] 任意可打印
[[:punct:]] 标点符号
[[:space:]] 任意空白字符, 包括垂直制表符, 如空格, lt , nl , CR 等
[[:upper:]] 任意大写
[[:cntrl:]] ASCII 控制字符
[[:graph:]] 非控制非空格
[[:xdigit:]] 16 进制数字
* 前的字符可不出现或多次出现, /colou*r/
“ .* ”,出现在一行文本上任意位置的单词
* 用于字符类:
eg: $echo "bt" | sed -n '/b[ac]*t/p' #TBD : ac 可任意出现?
同 * 的不同:不出现或仅出现一次,也可与字符类连用
同 * 的不同:必须出现一次或多次
对可重复字符出现次数进行限制 (interval) , {m} 或 {m,n} , /{min,max/} ,{ m, }表示最少 m 次
be{1}t # 等价于 bet ?
gawk 中需指定参数 --re-interval ,
eg:
echo "bt"|gawk --re-interval '/be{1}t/{print $0}'
用于字符类:
gawk --re-interval "/b[ae]{1,2}t"
逻辑 or ,指定多个正则表达式, gawk '/cat|dog/'
分组,一个组合作为一个标准字符处理, eg:
gawk '/sat(urday)?/ # 要求 urday 出现 0 到 1 次;
gawk '/(c|b)a(b/t)/' #TBD :等价于 '[cb]a[bt]'??