shell 正则表达式学习笔记
基础正则表达式
- 行首定位符
^
str=`ls /etc | grep ^po`
echo "$str"
打印出/etc目录下所有以po开头的文件名 行尾定位符”$”
str=`ls /etc | grep conf$` echo "$str"
打印出/ect目录下所有以conf结尾的文件名。
- 利用行首定位符和行位定位符来精确定位一个文件
^cat$ %将所需要精确匹配的文件名放置在行首定位符和行尾定位符之间就可以了
- 单个字符匹配符”.”
圆点可以用来匹配任意单个字符,包括空格,但是不包括换行符”\n”
str=`ls /etc | grep "samba."`
echo "$str"
限定符”*”
str=`ls /etc | grep "^sss*"` echo "$str"
\^sss* 表示以字符ss开头,接着是0个或者多个字符s
字符集匹配’[]’
[abc]表示只要某个字符串在方括号所在位置出现了方括号内的任意一个字符,都满足匹配规则str=`ls /etc | grep "^rc[0-9]"` echo "$str"
满足rc开头数字结尾的文件名
- 字符集不匹配[^]
[^]表示不匹配其中列出的任意字符
扩展正则表达式
限定符”+”
+表示前面的字符至少出现一次。str=`ls /etc | egrep "^sss+"` echo "$str"
筛选以字符串”ss”开头,后面至少紧跟一个字符’s’
限定符’?’
表示限定前面的字符最多只出现一次。即前面的字符可以重复0次或者1次
str=`ls /etc | egrep "^sss?"` echo "$str"
筛选以字符串ss开头,后面跟着0个或者1个s的文件
- 竖线’|’ 和圆括号()
竖线表示多个正则表达式之间’或’的关系
()表示一组可选值的集合
shell
str=`ls /etc | egrep "(ssh|ssl|^yum)"`
echo "$str"
筛选含有字符串ssh ssl或者以yum开头的文本行
Perl正则表达式
- 数字匹配’\d’
\d匹配0~9中的任意一个数字,等价于[0-9] - 非数字匹配’\D’
\D匹配一个非数字字符,等价于[^0-9] - 空白字符匹配’\s’
‘\s’匹配所有空白字符,包括空格、制表符、以及换页符。等价于[\f\n\r\t\v] - 非空白符匹配’\S’
‘\S’匹配任何非空字符,等价于表达式[^\f\n\r\t\v]
常用字符集表达形式
[Cc]hina %表示匹配china和China两个字符串
[^hello] %表示不匹配hello这个字符串
[a-zA-Z] %表示匹配所有大小写字母
[0123456789] %表示匹配所有的个位数字
[0-9] %同第四个
POSIX字符集
字符类 说明 [:alnum:] 匹配任意一个字母或者数字,等价于A-Za-z [:digit:] 匹配任意一个数字,等价于0-9 [:alpha:] 匹配任意一个字母,等价于a-zA-Z [:lower:] 匹配一个小写字母,等价于a-z [:upper:] 匹配一个大写字母,等价于A-Z [:space:] 匹配一个空白字符,包括空格、制表符、换行符、分页符等 [:blank:] 匹配空格和制表符 [:graph:] 匹配任意一个看得见的可打印字符,不包括空白字符 [:print:] 匹配一个可打印字符,包括空白字符,但是不包括控制字符、’\0’、EOF文件结束符 [:cntrl:] 匹配任意一个控制字符。 [:punct:] 匹配任意一个标点符号。 [:xdigit:] 匹配16进制数 即0-9,a-f,A-F
使用方法[[:alnum:]]等价于[a-zA-Z0-9]