如何修改grep正则表达式以忽略空白匹配连续重复数字?
问题描述
现有文件file.txt内容如下:
abc abc1 abc11 11abc abc111 abc abc1
已知用命令 grep -E '([0-9])\1{2,}' file.txt 能筛选出包含3个及以上连续相同数字的行,输出结果是:
abc111
请问怎么修改这个正则表达式,让它忽略空白字符,得到下面的输出?
abc111 abc11 11abc
解决方案
直接修改正则,允许相同数字之间插入任意空白字符,命令如下:
grep -E '([0-9])(\s*\1){2,}' file.txt
简单解释
([0-9]):捕获单个数字作为第一个分组(\s*\1):匹配“任意数量的空白字符(包括0个) + 刚才捕获的那个数字”{2,}:要求上面这个“空白+数字”的组合至少出现2次,加上最开始的那个数字,就凑够了3个及以上相同数字——不管中间有没有空白分隔都符合条件
这样就能同时匹配到连续3个1的abc111,以及被空格隔开的四个1的abc11 11abc,正好符合目标输出。
内容的提问来源于stack exchange,提问作者ee04395
相关产品推荐
相关产品推荐

