Shell grep 和正则
在grep中正则有三种模式, 分别是基础(-G), 扩展(-E)和Perl(-P)模式
basic 模式
不支持\d, 支持\w \s \b.
?, +, {, |, (, and ) 在basic 模式中也失去了其在正则式中的特殊含义
如果想在basic 中使用这些特殊字符,可以用\来转义
1 # echo "- 2222-" |grep -o '[0-9]+' 2 null 3 # echo "- 2222-" |grep -o '[0-9]\+' 4 2222
egrep 表示扩展模式, 实际上是grep -E 的别名
扩展模式不支持贪婪, \d, [\w]
# echo "- Aa2222-" |grep -oE '[\w] 输出为空.
同样扩展模式不支持捕获
- (?:X) 匹配但是非捕获
- pattern(?=X) 匹配但是非捕获, 向X前匹配
- (?<=X) pattern 匹配但是非捕获, 向X后匹配
- pattern(?!X) 与2相反, 表示pattern后面是非X
- (?<!X) pattern 与3相反, 表示pattern前面非X
Perl正则模式支持贪婪, 不支持(?:pattern)的非捕获模式
1 # echo "- 2222-" |grep -oP '[0-9]+?' #非贪婪模式 2 2 3 2 4 2 5 2 6 7 # echo "- 2222-" |grep -oP '[0-9]+' #贪婪模式 8 2222