(7)\{n\}
练习
\{n\}
表示其前面的字符恰好出现n次。
提示:\{n\}
中的\
表示转义符,下面同理。
如下面一段文本:
Stay hungry, stay foolish. ——Steve Jobs
求知若饥,虚心若愚。——乔布斯
Stay hungry, stay folish. ——Steve Jobs
Stay hungry, stay fooolish. ——Steve Jobs
Stay hungry, stay foooolish. ——Steve Jobs
Stay hungry, stay fooooolish. ——Steve Jobs
- 匹配包含三个连续的o
执行命令:grep "o\{3\}" test2.txt
可以看到有三个连续的o,或者包含三个连续o,都会被匹配到。
那与直接正则匹配三个o有什么区别?
执行命令:grep "ooo" test2.txt
原因:
如果是想匹配一个重复的字母,直接匹配字母的方式更为方便。
而如果我想要匹配重复任意字母或者数字,则\{n\}
方式更为便捷。
看下面练习。
- 匹配三个连续的数字
文本
abc adapt 适应 abc
12a adopt 采用 12345
abc adept 内行 XYZ
1b3 floor 地板 7788999
123 flour 面粉 123
执行命令:grep "[0-9]\{3\}" test2.txt
![](https://img.haomeiwen.com/i2495229/ae75a0fa2639d677.png)
我们可以看到,有三个连续的数字,或者包含有三个连续数字的文本,都被匹配到了。
如果我们要是不用
\{n\}
的方式进行正则匹配的话,如下:执行命令:
grep "[0-9][0-9][0-9]" test2.txt
![](https://img.haomeiwen.com/i2495229/ccad75100b520c43.png)
我们可以看到上边的命令就会麻烦很多,如果要是匹配10个连续的数字,那命令就非常的冗余了。
字母也是同理的。
-
只匹配三个连续的数字
虽然上面的12345和7788999是包含三个连续的数字,所以也是可以列出的。
可是这样不能体现出来[0-9]\{3\}
只能匹配三个连续的数字,而不是匹配四个连续的数字。
那么正则中就应该加入限位(制)符(可以是前后有标识的字符或者是行尾行首等进行限位),如下:
执行命令,限制行首:grep "^[0-9]\{3\}" test2.txt
或者限制行尾,注意前边要多加一个空格限位,才能符合该需求。
执行命令:grep " [0-9]\{3\}$" test2.txt
-
用上面一段文本,练习匹配只包含三个o的文本。
执行命令:grep "fo\{3\}l" test2.txt
说明:f和l就是限位(制)符。
注意:
\{n\}
匹配的方式一般不会用于匹配字母,多用于匹配数字,如电话号码。
还要再重复一遍,正则表达式是包含匹配,多注意限位(制)符的使用。
(8)\{n,\}
练习
\{n,\}
表示其前面的字符出现不小于n次。
如下面一段文本:
Stay hungry, stay foolish. ——Steve Jobs
求知若饥,虚心若愚。——乔布斯
Stay hungry, stay folish. ——Steve Jobs
Stay hungry, stay fooolish. ——Steve Jobs
Stay hungry, stay foooolish. ——Steve Jobs
Stay hungry, stay fooooolish. ——Steve Jobs
比如fo\{4,\}l
这个正则就会匹配用f开头,l结尾,中间最少有4个o的字符串。
执行命令:grep "fo\{4,\}l" test2.txt
![](https://img.haomeiwen.com/i2495229/b3bb19d207680435.png)
正则表达是fo\{4,\}l
与ooooo*
的区别同上边(7)\{n\}
同理。
练习:匹配至少连续5个字数的文本
abc adapt 适应 abc
12a adopt 采用 12345
abc adept 内行 XYZ
1b3 floor 地板 7788999
123 flour 面粉 123
执行命令:grep "[0-9]\{4,\}" test2.txt
![](https://img.haomeiwen.com/i2495229/c94a8ae27b49a85c.png)
(9)\{n,m\}
练习
\{n,m\}
匹配其前面的字符至少出现n次,最多出现m次。
下面一段文本:
Stay hungry, stay foolish. ——Steve Jobs
求知若饥,虚心若愚。——乔布斯
Stay hungry, stay folish. ——Steve Jobs
Stay hungry, stay fooolish. ——Steve Jobs
Stay hungry, stay foooolish. ——Steve Jobs
Stay hungry, stay fooooolish. ——Steve Jobs
Stay hungry, stay foooooolish. ——Steve Jobs
匹配在字母f和字母l之间有最少3个o,最多5个o。
执行命令:grep "fo\{3,5\}l" test2.txt
![](https://img.haomeiwen.com/i2495229/e641b34de5b16873.png)
4、总结
我们学习Shell的正则表达式,实际的应用是什么?
-
主要是做字符串的模糊匹配,比如要求你输入一个手机号,或者身份证号,再或者是一个邮箱地址等,做模糊匹配,进行错略的过滤,来过滤掉一些不符合规则的输入。(更细的验证在后台处理,如短信或者邮箱等验证操作)
-
还有再Shell中我们也常常会读取文本中的数据,这些文本中的数据也是字符串,我们通过正则表达式来过滤出一些我们需要的数据信息。
提示:要注意区分正则表达式和通配符中的符号功能的不同。
网友评论