Linux系统开发: linux下正则表达式
1.1 正则表达式介绍
正则表达式就是为了处理大量的文本|字符串而定义的一套规则和模板。
通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。
Linux正则表达式一般以行为单位处理。
正则表达式应用非常广泛,存在于各种语言中:php perl Python 等。
现在学的是Linux中的正则表达式,最常应用正则表达式的命令是linux三剑客:grep(egrep),sed,awk。
Linux系统开发: 学习linux三剑客(awk、sed、grep)(上)
Linux系统开发: 学习linux三剑客(awk、sed、grep)(下)
正则表达式是一个模版,这个模版是由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。
在少数情况下,正则表达式可能失效,多数与字符集有关。
1.2 区分通配符与正则表达式
这里一定要弄清楚正则表达式和linux下使用的通配符有本质区别。
正则表达式用来找:【文件】内容,文本,字符串。一般只有三剑客支持。
示例:
#grep 123* demo.c 123* 则表明匹配12或1234/1235等字符串,但是不能匹配123 |
通配符用来找:文件目录名,普通命令都支持。
示例:
#ls * 表明递归列出当前目录下的所有不以.号开头的文件信息 |
在三剑客awk,sed,grep,egrep都是正则表达式,其他都是通配符
1.3 正则表达式的分类
基本的正则表达式(Basic Regular Expression 又叫Basic RegEx 简称BREs)
扩展的正则表达式(Extended Regular Expression 又叫Extended RegEx 简称EREs)
Perl的正则表达式(Perl Regular Expression 又叫Perl RegEx 简称PREs)
1.3.1 基本的正则表达式
BREs |
EREs |
PREs |
描述 |
实例 |
\ |
\ |
\ |
转义符,将特殊字符进行转义,忽略其特殊意义 |
a\.b就表示匹配a.b,而a.b则表示匹配除换行符之外的任意单个字符,例:aab,abb |
^ |
^ |
^ |
匹配行首,awk中,^则是匹配字符串的开始 |
^name匹配以name开头的行 |
$ |
$ |
$ |
匹配行尾,awk中,$则是匹配字符串的结尾 注意:^$表示匹配空白行 |
sh$匹配以sh结尾的行 |
. |
. |
. |
匹配除换行符\n之外的任意单个字符,awk则中可以 |
a.b则表示匹配除换行符之外的任意单个字符,例:aab,abb |
[] |
[] |
[] |
匹配包含在[字符]之中的任意一个字符,可用[a-z],[0-9],[\.,/] |
a[ab]匹配aa或ab |
[^] |
[^] |
[^] |
匹配[^字符]之外的任意一个字符 |
[^12]表示不匹配12但可以匹配123,124 |
[-] |
[-] |
[-] |
匹配[]中指定范围内的任意一个字符,要写成递增 |
[0-9]匹配0-9的任意一个数字 |
不支持 |
? |
? |
匹配之前的项1次或者0次(省略?前一个字符) 如果匹配0次,则默认为空,也就等于全匹配了。 |
127?3可匹配1273,可匹配123,不可匹配12743 |
不支持 |
+ |
+ |
匹配之前的项1次或者多次 |
11+可匹配11,也可匹配116,1167等 |
* |
* |
* |
匹配之前的项0次或者多次。匹配0个时,实际上为空,那么默认匹配全文件内容,因此所有文件内容都会显示出来,然后再匹配大于0个的情况。 .*则表示匹配任意字符 ^.*匹配任意字符开头的行 .*$匹配任意字符结尾的行 |
1237*可匹配123,12378,不可匹配1237 *2可匹配里面所有有2的内容 |
不支持 |
() |
() |
匹配表达式,创建一个用于匹配的子串,注意()有时可需用到转义字符。 |
hell 匹配包含hell的字符串 |
不支持 |
{n} |
{n} |
匹配之前的项n次,n是可以为0的正整数 |
[0-5]{5}可匹配每位为0-5之间的五位数 |
不支持 |
{n,} |
{n,} |
之前的项至少需要匹配n次,注意,有时需用到转义字符,如果使用扩展正则表达式选项参数,可不用转义字符。 |
[0-5]{3\,}可匹配每位为0-5之间的至少三位数 |
不支持 |
{n,m} |
{n,m} |
指定之前的项至少匹配n次,最多匹配m次,n<=m |
[0-5]{3\,5},可匹配每位为0-5之间的至少三到五位数。(此表达式实测有出入) |
不支持 |
| |
| |
交替匹配|两边的任意一项,有时需用到转义字符 |
abc∥d ,可匹配abc或abd |
只有在用反斜杠\进行转义的情况下,字符(),{}才会在BRE被当作元字符处理,而ERE中,任何元符号前面加上反斜杠反而会使其被当作普通字符来处理。所以ERE中直接使用(),{},而BRE则 ,\{\}
grep中调用-E参数指定使用扩展正则表达式。
sed中调用-r参数指定使用扩展正则表达式。
或者直接使用egrep。
1.3.2 POSIX字符类
POSIX字符类是一个形如[:...:]的特殊元序列(meta sequence),他可以用于匹配特定的字符范围。
注意运用时还得在外层加一对[]号。
BREs |
EREs |
PREs |
描述 |
实例 |
[:alnum:] |
[:alnum:] |
[:alnum:] |
匹配任意一个字母或数字字符 |
[[:alnum:]]匹配所有带任意一个数字或字母的行 |
[:alpha:] |
[:alpha:] |
[:alpha:] |
匹配任意一个字母字符 |
[[:alpha:]]匹配所有带任意一个字母的行 |
[:blank:] |
[:blank:] |
[:blank:] |
匹配空格或制表符(\t、\v) |
[[:blank:]]匹配所有带空格或制表符的行 |
[:digit:] |
[:digit:] |
[:digit:] |
匹配任意一个数字字符 |
[[:digit:]]匹配所有带任意一个数字字符的行 |
[:xdigit:] |
[:xdigit:] |
[:xdigit:] |
匹配一个十六进制数(即:0-9,a-f,A-F) |
[[:xdigit:]]匹配所有带任意一个十六制数字符的行 |
[:lower:] |
[:lower:] |
[:lower:] |
匹配小写字母 |
[[:lower:]]匹配所有带小写字母的行 |
[:upper:] |
[:upper:] |
[:upper:] |
匹配大写字母 |
[[:upper:]]{2}匹配连续出现两个大写字母的行 |
[:punct:] |
[:punct:] |
[:punct:] |
匹配标点符号 |
[[:punct:]]匹配所有带标点符号的行 |
[:space:] |
[:space:] |
[:space:] |
匹配一个包括换行符(\r)、回车在内的所有空白符 |
[[:space:]]匹配所有带换行符或回车的的行 |
[:graph:] |
[:graph:] |
[:graph:] |
匹配任意一个可以看得见并可以打印的字符 |
[[:graph:]]匹配所有带任意一个可以看得见并可以打印的字符的的行 |
[:cntrl:] |
[:cntrl:] |
[:cntrl:] |
匹配任意一个控制字符(ASCII前32个字符) |
[[:cntrl:]]匹配所有带任意一个控制字符的行 |
[:print:] |
[:print:] |
[:print:] |
匹配任意一个可以打印的字符 |
[[:print:]]匹配所有带任意一个可以打印的字符的的行 |
1.3.3 Perl的正则表达式: 元字符
元字符(meta character)是一种Perl风格的正则表达式,只有一部分文本处理工具支持它,并不是所有的文本处理工具都支持。
BREs |
EREs |
PREs |
描述 |
\b |
\b |
\b |
单词边界 |
\B |
\B |
\B |
非单词边界 |
\w |
\w |
\w |
单个单词字符(字母、数字、_) |
\W |
\W |
\W |
单个非单词字符 |
不支持 |
不支持 |
\d |
单个数字字符 |
不支持 |
不支持 |
\D |
单个非数字字符 |
不支持 |
不支持 |
\s |
单个空白字符 |
不支持 |
不支持 |
\S |
单个非空白字符 |
不支持 |
不支持 |
\r |
回车 |
不支持 |
不支持 |
\n |
换行符 |
不支持 |
不支持 |
\t |
横向制表符 |
不支持 |
不支持 |
\v |
垂直制表符 |
不支持 |
不支持 |
\f |
换页符 |
文章来源: xiaolong.blog.csdn.net,作者:DS小龙哥,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaolong.blog.csdn.net/article/details/118769972
- 点赞
- 收藏
- 关注作者
评论(0)