一:正则表达式与shell
shell也支持正则表达式,但不是所有命令都支持正则表达式,常见的命令只有grep、sed、awk命令支持正则表达式
注意:grep -E 和egrep 是等同的
二:特殊字符
定位符 | 说明 |
^ | 锚定开头以^a为a开头,默认锚定一个字符 |
$ | 锚定结尾a$以a结尾,默认锚定一个字符 |
定位符使用技巧:同时锚定开头和结尾,做精准匹配;单一锚定开头和结尾,做模糊匹配
【测试案例】
egrep "^ac$" 文件名 #从文件中匹配以a开头,以c结尾的字符
匹配符 | 说明 |
. | 匹配除回车以外的任意字符 |
() | 字符串分组 |
[] | 定义字符类,匹配括号中的一个字符 |
[^] | 表示否定括号中出现字符类的字符,取反 |
\ | 转义字符 |
| | 或 |
【测试案例】
egrep "^a.c$" 文件名 #从文件中匹配以a开头,以c结尾,中间任意的字符串
egrep "^a[0-9]c$" 文件名 #从文件中匹配以a开头,以c结尾,中间0-9的字符串
egrep "^a\*c$" 文件名 #从文件中匹配以a开头,以c结尾,中间是*的字符串
egrep "^(a|b)c$" 文件名 #从文件中匹配以a或b开头,以c结尾的字符串
限定符 | 说明 |
* | 某个字符之后加星号表示该字符出现0次或多次 |
? | 与星号相似,表示该字符出现0次或1次 |
+ | 与星号相似,表示其前面字符出现1次或多次,单必须出现1次 |
{n,m} | 某个字符之后出现,表示改字符最少n次,最多m次 |
{m} | 正好出现了m次 |
【测试案例】
egrep "^ab*c$" 文件名 #匹配以a开头,以c结尾,中间没有b或者中间有多个b的字符串
egrep "^ab{3}c$" 文件名 #匹配以a开头,以c结尾,中间正好出现了3个b的字符串
egrep "^ab{2,5}c$" 文件名 #匹配以a开头,以c结尾,中间正好出现了2-5个b的字符串
三:POSIX字符
[[:alnum:]] | 匹配任意字母字符0-9 a-z A-Z |
[[:alpha:]] | 匹配任意字母,大写或小写 |
[[:lower:]] | 小写字母a-z |
[[:print:]] | 非空字符(包括空格) |
[[:blank:]] | 空格与TAB字符 |
[[:punct:]] | 标点符号 |
[[:cntrl:]] | 控制字符 |
[[:space:]] | 空白字符 |
[[:upper:]] | 大写字母A-Z |
[[:digit:]] | 数字0-9 |
[[:graph:]] | 非空字符 (非空格字符) |
[[:xdigit:]] | 16进制数字 |
补充:
echo a*c >> file 把a*c追加到file中