正则表达式及其用法
1. 什么是正则表达式
正则表达式是Global search REgular expression and Print out the line的缩写。是一类用字符所书写的模式,其中许多字符并不表示其字面意义,而是表达控制或通配等功能。
在Linux中,用正则表达式搜索文本的常用命令:
grep: 使用基本正则表达式匹配文本。
egrep:使用扩展正则表达式匹配文本,同: grep –E。
fgrep: 快速grep,不支持正则表达式,不识别元字符。
语法格式:
grep [option]… 'PATTERN' FILE…
2. 基本正则表达式
(1) 字符匹配
(a) .: 匹配任意单个字符。
(b) []:匹配指定范围内的任意单个字符。
[0-9] 或[[:num:]]:匹配任意当个数字
[a-z]或[[:lower:]]:匹配任意单个小写字母
[A-Z]或[[:upper:]]:匹配任意一个大写字母
[[:space:]]:匹配空格或制表符
[[:punct:]]:匹配特殊字符
[[:alpha:]]:匹配单个任意字符
[[:alnum:]]:匹配单个字母或数字
(c) [^]:匹配不包括指定范围内的任意单个字符。
(2) 次数匹配
(a)*: 匹配它前面出现的字符任意次。
(b)\?: 匹配它前面的字符0次或1次。
(c)\{m\}: 匹配它前面出现的字符m次。
(d)\{m,n\}: 匹配它前面出现的字符至少m次,至多n次。
(e)\{m,\}: 匹配它前面出现的字符至少m次。
(f)\{,n\}: 匹配它前面出现的字符至多n次。
(g).*: 匹配任意长度的任意字符.
(3) 位置锚定
(a)^: 锚定句首,写在模式的最左面。
(b)$: 锚定句尾,写在模式的最右端。
(c)\<: 锚定词首,写在模式的最左面。
(d)\>: 锚定词尾,写在模式的最右面。
(e).* : 空白行
(4) 分组\(\)
分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用。
(5) 引用 \#
引用第#个括号中匹配到的内容,而不是模式本身。
如:\(ab\?c\).*\1 abcmnabc 匹配
3. 扩展正则表达式
(1) 字符匹配(同基本正则表达式)
(a) .: 匹配任意单个字符。
(b) []:匹配指定范围内的任意单个字符。
(c) [^]:匹配不包括指定范围内的任意单个字符。
(2) 次数匹配
(a)*: 匹配它前面出现的字符任意次。
(b)?: 匹配它前面的字符0次或1次。
(c)+: 匹配前面出现的字符至少一次。
(c){m}: 匹配它前面出现的字符m次。
(d){m,n}: 匹配它前面出现的字符至少m次,至多n次。
(e){m,}: 匹配它前面出现的字符至少m次。
(f){,n}: 匹配它前面出现的字符至多n次。
(3) 位置锚定 (同基本正则表达式)
(4) 分组()
(5) 引用 \# (同基本正则表达式)
(6) 或者 |
如:a|b 表示 a或b
ab|cd 表示 ab或cd
练习:
1.新建一个文本文件,假设有如下内容:
He like his lover.
He love his lover.
He like his liker.
He love his liker.
找出其中最后一个单词是由此前某单词加r构成的行。
[root@centos7 ~]# cat ./liker.txt He like his lover. He love his lover. He like his liker. He love his liker. [root@centos7 ~]# grep '\<\(.*\)\>.*\1r' ./liker.txt He love his lover. He like his liker. [root@centos7 ~]# |
2.写一个模式,能匹配合理的ipv4地址;1.0.0.0-239.255.255.255
[root@centos7 ~]# cat ./ip.txt 249.1.0.1 229.2.1111.1 0.0.0.0 255.255.255.255 239.255.255.255 1.0.0.0 1000.0.0.0.0 1.1000.0.0 1.2.2000.0 1.2.3.4000 127.0.1.10 [root@centos7 ~]# grep -o -E '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-3][0-9])((\.)([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}\>' ./ip.txt 239.255.255.255 1.0.0.0 1.2.3.40 127.0.1.10 [root@centos7 ~]# |
原创文章,作者:浪迹天涯,如若转载,请注明出处:http://www.178linux.com/7969