我想知道如何在我的1000行txt文件中检查是否有两行具有相同的模式。在第三部分,即“CF.Name”,即我有类似的东西:
APPNAME NO CF.Name
automotive_bitcount 1 -funsafe-math-optimizations -fno-guess-branch-probability
automotive_bitcount 1 -fno-guess-branch-probability -fno-inline-functions -funroll-all-loops -O2
security_blowfish_e 2 -funsafe-math-optimizations -fno-ivopts -O2
security_blowfish_e 2 -funsafe-math-optimizations -fno-ivopts -fno-tree-loop-optimize -funroll-all-loops -O2
等等。只是想确保所有生成的CF.Name彼此不同。
答案 0 :(得分:3)
我的PatternsOnText plugin有一个:PrintDuplicateLinesIgnoring
命令,可以在跳过某些部分时搜索行中的重复内容。在您的示例中,您希望忽略前两个部分,可以通过行开头,一些非空白,一些空白,一些非空白,一些空白来匹配。埃尔戈:
:PrintDuplicateLinesIgnoring /^\S\+\s\+\S\+\s\+/
注意:这仍然找不到以不同顺序给出相同参数的行;希望你的创建过程能够确保,或者你必须先对参数进行排序。
答案 1 :(得分:2)
删除除要检查的列之外的所有列,然后:sort u
。如果结果是1000行,那么您知道该部分中没有两行具有相同的模式。
答案 2 :(得分:2)
我会接受部分其他答案:在@ Jeff的答案中使用:sort
,但使用@Ingo Karkat答案中的模式,而不是删除其他列:
:sort /^\S\+\s\+\S\+\s\+/
现在换新的东西:多线模式。如果要查找两条相同的连续行,请使用/^\(.*\)\n\1$
。如果您关心第三列(由空格分隔),则搜索
/\v^\S+\s+\S+\s+(\S+).*\n\S+\s+\S+\s+\zs\1\S@!
对于多样性,我使用了\v
(“非常神奇”)变体。 (这样+
和@!
不需要以\
开头。)此外,我在\zs
(“从这里开始”)滑入,这样您只需突出显示有趣的部分。