如何编写grep正则表达式匹配含连续重复数字的行(空格无关)
解决方案
要匹配文件中存在连续重复数字(空格不影响匹配)的行,你可以使用以下grep命令:
grep -E '([0-9])\s*\1' input-file.txt
原命令的问题分析
你之前使用的grep -E '([0-9]+) \1' input-file.txt存在两个关键局限:
- 它要求匹配一个或多个数字组成的完整序列,而非单个数字的重复,比如只有"123 123"这种整组重复的情况才会被匹配,无法捕获"999"或"33"这类单个数字连续重复的场景;
- 强制要求重复序列之间必须有且仅有一个空格,既无法匹配无空格的连续数字重复,也不能兼容多个空格的情况。
正则表达式详解
([0-9])\s*\1的各部分作用:
([0-9]):捕获单个0-9的数字,作为第一个捕获组;\s*:匹配零个或多个空白字符(包括空格、制表符等,适配你的文件格式),实现"空格不影响匹配"的需求;\1:引用第一个捕获组捕获的数字,确保前后是同一个数字。
匹配验证
针对你提供的测试文件:
- 第一行
2999 1245 8765 2323:999中包含连续重复的9,会被匹配; - 第二行
4545 1213 1332 6543:1332中的33会被匹配; - 第三行
1234 4567 6789 0124:1234末尾的4与4567开头的4被空格隔开,符合匹配规则,会被匹配; - 第四行
1234 5678 9012 3456:没有任何单个数字重复(无论是否有空格),不会被匹配。
完全符合你的预期结果。
内容的提问来源于stack exchange,提问作者tijko
相关产品推荐
相关产品推荐

