(9.1)正则表达式RE
原创
©著作权归作者所有:来自51CTO博客作者喜欢打篮球的普通人的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
- 1.重要的文本处理工具
- 2.正则表达式元字符
- 3.扩展正则表达四元字符
- 4.前导符总结:*,?,+,{}
- 5.POSIX字符类
- 5.正则匹配eg:vim
1.重要的文本处理工具
- 对文本处理的:vim,sed,对文本进行过滤和截取的awk,以及grep都会用到正则
- 正则表达式:
正则表达式regular expression,RE,是一种字符模式,用于在查找过程中匹配的指定的字符。
在大多数的程序里,正则表达式都被置于两个正斜线之间,eg:/[oO]ve/就是由正斜杠界定的正则表达式 ,它将匹配被查找的行中任何位置出现的相同模式。
在正则表达式中,元字符是最重要的概念 - eg:
匹配数字: ^[0-9]+$
123
##[]范围中的一个数字,+表示前面的对象出现1次或者多次
匹配Mail
[a-z0-9_]+@[a-z0-9]+\.[a-z]+
jiwangreal@163.com
##\.这里的\表示转义,.的意思类似于shell中的?,表示任意单个字符
匹配IP
[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
##[0-9]{1,3}表示数字0-9出现1-3次数
2.正则表达式元字符
- 基本表达式的元字符,注意里面有[ ],( ),{ }
.*是匹配多个字符,匹配任意一行
eg1:grep ‘^\ <root\ >’ /etc/passwd 表示以root开头的单词
eg2:
grep '^root' /etc/passwd 表示以root开头的
grep '^[rc]oot' /etc/passwd 表示以r或者c开头的
grep '^[^rc]oot' /etc/passwd 表示不以r或者c开头的
^在[]里面表示取反,不要
^在[]外面表示以谁开头
\转移字符会让这些元字符失去作用,让其还回原意。
love\. 表示只匹配love.
\(..\)在vim里面用的多:
:% s/10.16.130.1/172.16.130.5/ 表示将172.16.130.1替换成172.16.130.5
:% s/\(172.16.130.\)1/\15/ 表示将172.16.130.1替换成172.16.130.5,其中\1代表\(172.16.130.\)的内容
:3,9s/\(.*\)/#\1/ 表示将3-9行给注释掉
eg3:下面第一个表示o出现2次
- shell里面不区分大小写:ll l[a-z]ve
3.扩展正则表达四元字符
- egrep支持扩展元字符,grep不支持扩展元字符
eg:ss -an|egrep ‘:80|:20\ >’
4.前导符总结:*,?,+,{}
- 下面的符号都是对前面的符号负责,用红色已经标记出来了,后面的表示匹配的次数
5.POSIX字符类
5.正则匹配eg:vim
/love/ 匹配love
/^love/ 匹配以love开头的行
/love$/ 匹配love结尾的行
/l.ve/ 匹配l任意字符ve
/lo*ve/ 匹配l零到多个o可能没有o的ve
/[Li]ove/ 匹配Love或love
/love[a-z]/ 匹配love后面跟着小写字母
/love[^a-zA-Z0-9]/ 匹配love非字符
/.*/ 匹配整行,匹配任意一行
/^$/ 匹配空行
/^[A-Z]..$/ 注意这里匹配的是3个字符
/^[A-Z][a-z]*3[0-5]/ 匹配A-Z开头的,零到任意多个的a-z字符的,再接着跟着3以及0-5字符
/[a-z]*\./ 匹配零到多个小写字母,后面跟着.
/^ *[A-Z][a-z][a-z]$/ 匹配零到多个空格开头的,跟着[A-Z][a-z][a-z]结尾的行
/^[A-Za-z]*[^,][A-Za-z]*$/ 匹配零到多个英文字母开头,跟着一个非逗号,再跟着一个字母结尾的
/\<fourth\>/ 匹配fourth
/\<f.*th\>/ 匹配以f开头,th结尾的单词
/5{2}2{3}\./ 匹配5出现2次
空行,即换行符和回车
/^$/
/^[ \t]*$/ 零个或多个空格或tab
注释行
/^#/
/^[ \t]*#/