首先,正则表达式和shell通配符是完全两个东西,要注意对比不能混淆。比如:通配符中的 * 表示任意字符,而正则中表示任意个重复 * 号前面的字符......
下面开始介绍正则表达式中的的相关内容
1,[ ], 中括号表示需陪匹配的字符集,注意,这是一个集合,
如:[ a1cf] 表示匹配包含a,或者1,或者c,或者f的行,注意是或的关系
[a-z] 表示匹配包含小写字母,a-z是联系的小写字母,所以可以用 - 连接起来
[a-zA-Z0-9] 表示匹配含小写字母或者大写字母或者数字
[ [:alpha:] ] 表示匹配所以的字母,包括大小写字母,其中[alpha:] 是正则表达式中的特殊字符代表字母集,注意还有其他的特殊字符集合:
[:alnum:]: 0-9,A-Z,a-z
[:blank:]: 空格键和tab键
[:cntrl:]: 控制键,CR,LF,TAB,Del
[:digit:]: 数字
[:graph:]: 除了空格键以外的所有键
[:lower:]: 小写字母集合
[:print:]: 任何可以打印出来的字符
[:punct:]: 标点符号
[:upper:]: 大写字母集合
[:space:]: 任何可以产生空白的字符
[:xdigit]: 代表十六进制的数字类型,0-9,A-F,a-f等数字和字符
^[[:graph:]] :以字母为行首的
[^[:graph:]] :不包含字母的,注意和上一行的区别, 这个是反选的意思
[[:graph:]]$ :以字母为行尾巴的
对于行首 ^ 和行尾 $ 的字母理解,可以跟linux中文本的存储格式结合,linux文本中每一行都是以^开头,以$结尾,如果是空白行的话就是 ^$,
注意:[ ]里面的字符是以一个字符进行匹配的,多个字符之间是通过或的方式来组合的。这个要在应用中慢慢体会。
2,任意字符 . 和 任意个数的重复字符 *
. 代表任意一个字符,该字符必须存在
* 代表任意个重复的字符。
注意,这中类型的匹配和上面的集合不同,不要把*号放到[ ]进去哦。
如: grep 'o*' file.txt, :匹配包含任意个重复的连续的o
3,限定连续有限个重复字符范围 {}
上面的*表示可以任意多个重复的字符,而如果有限个重复的字符,那么就要用{}限定起来,例如:
grep -n 'o\{2\}' :两个重复的o
grep -n 'o\{2,5\}' :2到5个的重复o
grep -n 'o\{2,\}' :2个以上的o
注意,这个{ }打括号和[ ]中括号的用途不应样,两种使用情况不一样。
切记正则表达式要配合支持正则表达式的工具才能发挥其用处,比如grep,sed,awk等文本编辑工具就支持正则表达式。
这里介绍了正则表达式的基础,还有扩展的正则表达式在后续中更新。