在文本文件

时间:2017-10-13 09:59:42

标签: list sorting text duplicates notepad++

我的目标是识别并保留DUPLICATE,TRIPLICATE等行,即在Notepad ++中多次出现的所有行?换句话说,我怎么才能删除所有唯一的行?

例如,这里有七(7)个单独的列表和每个列表所需的真实重复行(显示为7列,将每列视为单独的列表或文件!)。 (这里的列表并排显示仅用于节省空间,在现实生活中,7个列表中的每个列表单独发生,独立于其他列表并且是单独的文件!)

list1  list2  list3  list4  list5  list6  list7
1      0      0      0      0      0      0
2      1      1      1      1      1      1
3      2      2      2      2      2      2
4      3      3      3      3      3      3
4      4      4      4      4      4      4
4      4      4      4      4      4      4
5      4      4      4      4      4      4
6      5      5      5      5      5      5
7      5      5      5      5      5      5
8      6      6      6      6      6      6
9      6      6      6      6      6      6
abc    7      7      7      7      7      7
abd    8      8      8      8      8      8
abd    9      9      9      9      9      9
abe           <CR>   9      9      9      9
                            <CR>   99     99
                                          <CR>

[Lines of multiple occurence of above lists:]         
4      4      4      4      4      4      4
4      4      4      4      4      4      4
4      4      4      4      4      4      4
abd    5      5      5      5      5      5
abd    5      5      5      5      5      5
       6      6      6      6      6      6
       6      6      6      6      6      6
                     9      9      9      9
                     9      9      9      9

消除重复项有很多解决方案(例如,TextFX; notepad++ delete duplicate and original lines to keep unique lines),我找不到保持重复项的解决方案。

((.*)\R(\2\R)+)*\K.+\R @Lars Fischer:这个脚本几乎可以正常工作,除了(预先排序)列表的最后一个条目需要是唯一行后跟一个<CR>空行。一个(次优)解决方法是插入一个人工(辅助)唯一线(例如,zzz),然后插入一个空行<CR>作为最后两行。

(问题结束)

更新3:每个stackoverflow“ask a new question”指令重新发布此问题。 (@AdrianHHH@B. Desai@Paolo Forgia@greg-449@Erik von Asmuth得出错误的结论,即此问题与notepad++ delete duplicate and original lines to keep unique lines重复。这个问题是绝对不是@AdrianHHH等引用的重复。History.

更新2:@AdrianHHH这个问题并不比其他Notepad ++问题“广泛”(事实上,更难以更具体)或更少研究,包括引用的https://stackoverflow.com/questions/29303148(错误地)由@AdrianHHH等人。同样的问题。

更新: @AdrianHHH@B. Desai@Paolo Forgia@greg-449@Erik von Asmuth 此问题与以下内容不同: https://stackoverflow.com/questions/29303148 beacuse Q 29303148 (i)既没有询问如何识别和保留多次出现的行,(ii)也没有提供解决方案答案。 Q 29303148问“......我只需要独特的线条。”

1 个答案:

答案 0 :(得分:3)

以下是基于常规表达式和书签的解决方案,它适用于已排序文件(即每个重复行后面都有其重复项):

  • 打开标记对话框(搜索 - &gt;标记....)
  • 点击右侧的清除所有标记
  • 检查书签行
  • 检查包裹声音
  • 查找内容: ((.*)\R(\2\R?)+)*\K.*
  • 检查正则表达式并取消选中. matches newline
  • 全部标记
  • 点击关闭
  • 搜索 - &gt;书签 - &gt;删除书签行

<强>解释

正则表达式由三部分组成:

  • ((.*)\R(\2\R?)+)*:这是一个由一个或多个行块组成的可选重复块

    • outher ( ... )*匹配零个或多个这样的重复行块(如果在您的示例中,三个4将跟随两个5,我们将需要重复块序列的概念
    • (.*)\R(\2\R?)+\2引用(.*)的内容:这是一行的重复
    • 第二个\R是可选的(由于?)换行符。因此,如果该行不以换行符结尾
    • ,则可以匹配文件最后一行中的副本

    如果在您开始的光标位置后有一个重复的行块,则会匹配它。

  • 现在\K会丢弃我们到目前为止匹配的内容(重复项)并将“光标”放在第一个唯一行之前

  • .*匹配下一个(唯一)行和书签

使用全部标记,我们会为所有此类唯一行添加书签,以便我们可以使用搜索中的条目删除它们&gt;书签菜单。