【问题标题】:VIM: search file for NON-matching numericsVIM:搜索文件以查找不匹配的数字
【发布时间】:2014-02-20 01:56:04
【问题描述】:

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

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

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

对于这个例子,我做了一些不是 16 位的记录。 16 位的记录只有 3 条,应放在底部,没有 16 位的 5 条应放在顶部。 [更新了数据示例,但此处未正确对齐...请参阅: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

感谢您提供解决此问题的任何帮助。

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

【问题讨论】:

    标签: regex search vim replace


    【解决方案1】:

    试试这个:

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

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

    【讨论】:

    • 我的结果可以在这里阅读:pastiebin.com/530592598c418有什么建议吗?
    • [0-9]可以写成\d,你要么需要切换到非常神奇的模式\v要么使用\{16}
    • 这可能或可能无关紧要,但@danadam 的解决方案将所有行移到顶部的顺序颠倒了。将m0 更改为m$,它们将被移动到文件的底部,而不是顶部,并且将保留顺序。
    • 感谢 danadam 的帮助,现在正在运行! Ingo,感谢您编辑我的帖子并协助 danadam。
    猜你喜欢
    • 2018-04-09
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    相关资源
    最近更新 更多