VIM:搜索非匹配数字的文件

时间:2014-02-20 01:56:05

标签: regex search vim replace

寻找一些搜索文件的vim帮助

我想帮助在一个文件中查找一些数据,例如160万条记录/行。

记录遵循与下面的内容非常相似的模式,我想在第二列数字中找到所有没有16位数的记录,然后将所有这些记录/行放到顶部或者放到底部。

对于这个例子,我做了一些没有16位数的记录。只有三个记录有16位数字,它们应该被带到底部,五个没有16位数字应该被带到顶部。 [更新了数据示例,但此处未正确对齐...请参阅:http://pastiebin.com/53059f6a0a218

A1553419V 4111111851111111 111811_2519104                                       
U1753419V 411001111111111  111811_2519104                                       
I1053419V 41111111881111   111811_2519104                                       
J1253419V 3566002020360505 111811_2519104                                       
P1153419V 378282246310005  111811_2519104                                       
C1953419V 12345678900000   111811_2519104                                       
T1953419V 852741369123     111811_2519104                                       
W1353419V 5610591081018250 111812_2519104                                       

顺便说一句,这些行在第80列结束。

所以在这个例子中,我想知道线条:2,3,5,6,7。 第1,5,8行在中间列中都有16位数字。

这个真正基本的语法只会突出显示所有16位数字,但是通过一百万个以上的记录是愚蠢的:/\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d

感谢您提供解决方案的任何帮助。

是的,任何脚本语言都可能(可能)更合适,如果你愿意写一些简单的东西来帮助世界,那就做我的客人吧。

1 个答案:

答案 0 :(得分:4)

试试这个:

:v/ [0-9]\{16} /m 0
  • :v - 对于不匹配的行
  • / [0-9]\{16} / - 空格,16位数,空格
  • m 0 - 将它们移至顶部(使用$代替0移至最底层)

编辑:正如Ingo评论的那样,{需要转义才能实现。