扩展正则表达式
基础正则表达式
| 字符 | 含义 | 字符 | 含义 |
|---|---|---|---|
| ^ | 只匹配行首 | $ | 只匹配行尾 |
| * | 匹配0个或多个在*之前的字符 | [ ] | 只匹配[]内字符,可以是一个单字符,也可以是符号序列,使用-表示[ ]内字符序列范围,如用[1-5]代替[12345] |
| \ | 只用来屏蔽一个元字符的特殊含义 | . | 只匹配任意单字符 |
| pattem\ {n\ } | 只用来匹配前面pattem出现次数,n为次数 | pattem\ {n,\ } | 含义同上,但次数最少为n |
| pattem\ {n,m\ } | 含义同上,但pattem出现次数在n和m之间 |
与基础正则表达式简单对比
正规表示法过滤掉文件 regular_express.txt 中的空行和注释行,需要使用到管线命令来搜寻两次!
1 | grep -v '^$' regular_express.txt |grep -v '^#' |
那么如果使用延伸型的正规表示法,我们可以简化为:
1 | egrep -v '^$|^#' regular_express.txt |
利用支持延伸型正规表示法的 egrep 与特殊字符 “|” 的组功能来区隔两组字符串,如此一来,就方便了许多。
此外,grep 默认仅支持基础正则表达式,如果要使用扩展性正则表达式,可以使用 grep - E、grep -E与egrep,相当于命令别名关系。
扩展规则
+ 表示重复一个或一个以上的前一个 RE 字符
1 | egrep -n 'go+d' regular_express.txt |
普通写法:
1 | grep -n 'goo*d' regular_express.txt |
上面两条命令匹配的字符串是:good、goood…
? 表示重复零个或一个前一个 RE 字符
1 | egrep -n 'go?d' regular_express.txt |
上述命令匹配的字符串是:gd、god
| 表示用或的方式找出数个字符串
1 | egrep -n 'gd|good' regular_express.txt |
匹配有 gd 或 good 的行
( ) 表示找出群组字符串
1 | egrep -n 'g(la|oo)d' regular_express.txt |
匹配有 glad 或 good 这两个字符串
( )+ 多个重复群组判别
1 | echo 'AxyzxyzxyzxyzC'|egrep 'A(xyz)+C' |
要找开头是 A 结尾是 C 中间有一个以上的 ‘xyz’ 或 ‘xz’ 字符串的意思。