我有一个大文本文件,我想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正则表达式吗?或任何其他方式来解决此问题。感谢。
答案 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
步骤2:
循环上一个匹配并使用此模式执行替换
\s:\s\d+\r?\n|\s
并且无需替换
步骤3:
将步骤#2的结果与您想要的序列8034277473968711
进行比较
比赛在第49场比赛中找到。