grep正则表达式来搜索数字序列

时间:2014-11-30 22:21:00

标签: regex linux windows grep cygwin

我有一个大文本文件,我想grep-search。文件的结构如下:

8071656799 4661447177 0355654334 3019852932 8351070080 3427747396 : 3099000001
8711668395 3649821348 9956324354 5011010810 9136023566 9366447433 : 3099000002
5082147211 3084342012 9526906615 7367215108 0922482666 6485161555 : 3099000003
4029562459 5180764444 6007631229 0296033611 6410243961 1599676529 : 3099000004
2029562935 7403306551 4667331755 4708680737 0948271458 0585681992 : 3099000005
3980586858 2774838233 2196908474 1817405080 5501649035 3043116116 : 3099000006
4821697167 9339115830 6953440258 6707173876 7188037671 5127476767 : 3099000007
0341392607 4082292483 7807211229 1753819242 4269141779 6567687980 : 3099000008

我想找到某些数字序列,同时忽略空格,冒号,行的末尾和每行的最后10位数。例如,可以在前两行找到8034277473968711:

80 3427747396 :3099000001 8711

拜托,你能帮我解决这个任务的grep正则表达式吗?或任何其他方式来解决此问题。感谢。

2 个答案:

答案 0 :(得分:3)

试试这个:

sed -e 's/\s//g' < sed -e 's/:[0-9]\+$//g' < inputFileName | sed -e ':a;N;$!ba;s/\n//g' | grep -o "8034277473968711"

我在AWS Ubuntu 14.04 microInstance中测试了这个。

我们正在运行并通过一系列sed来管道它并用grep -o关闭它。 -o标志可防止任意突出显示的大量文本墙,因为您正在处理大型数据集。它现在应该只显示结果,同时消除你在计算中不想要的所有东西。

inputFileName 替换为您的文件名和括号中的数字以及您要搜索的内容(无空格,只是直号)。

祝你好运!

答案 1 :(得分:-1)

步骤1:
使用此模式捕获所有可能的数字序列

(?=((?:\d(?:\s:\s\d+\r?\n|\s)?){16}))\d

Demo


步骤2:
循环上一个匹配并使用此模式执行替换

\s:\s\d+\r?\n|\s

并且无需替换


步骤3:
将步骤#2的结果与您想要的序列8034277473968711进行比较 比赛在第49场比赛中找到。