前言:上一篇我们初步感受了“正则表达式”的魅力。而在上次的例子中,我们处理的属于“位置匹配”的正则。而在实际应用中,还有一种常见的类型,叫做“连续次数匹配”。
2.连续次数匹配
那么,什么叫“连续次数匹配”呢?还是用实际例子来说明。
比如,你有一个test.txt文件,里面有五行字符串:
a
aa
aaa
abc
abcc
现在,我想匹配包含“aa”的字符串,怎么操作呢?有的同学可能会这样:
cat test.txt |grep "aa"
输出:
匹配“aa”字符串
这样,包含“aa”的两个字符串都被打印出来了。但是如果我想打印100个“a”,难道要手动输入100次吗,答案当然是不用,还是用“aa”举例:
cat test.txt|grep "a\{2\}"
输出:
和grep "aa"效果相同掌握这个方法以后,我们只需将
"a\{2\}"
替换成"a\{100\}"
即可匹配文本中含有连续100个“a”的字符串。
请继续思考输出结果,由于‘aa’和‘aaa’都包含“aa”,所以都被打印出来了。
但是如果我只想打印‘aa’,而不想要‘aaa’呢?那么我们可以这样限定:
cat test.txt |grep "\<a\{2\}\>" -n
输出:
只打印"aa"所在的行这一次我还加上了-n参数,可以顺便打印所在的行数,可以看到,在使用
"\<a\{2\}\>"
时,只有第二行被打印出来了,因为这个正则表示的是:只匹配字母“a”被重复两次的行(其实说的再具体一点,"\<a\{2\}\>"
其实限定了三个条件,位于行首,且位于行尾,且字母“a”只重复两次,自己动手看看是不是这个道理)。
网友评论