【问题标题】:How can I remove duplicate lines in Visual Studio Code?如何删除 Visual Studio Code 中的重复行?
【发布时间】:2016-10-25 20:08:42
【问题描述】:

假设你有以下文本:

abc
123
abc
456
789
abc
abc

我想删除所有“abc”行,只保留一个。我不介意排序。结果应该是这样的:

abc
123
456
789

【问题讨论】:

  • Younes,你最好回来接受@Marc.2377 的回答。这是天才。

标签: visual-studio-code


【解决方案1】:

我刚遇到同样的问题,发现 Visual Studio Code 包“排序行”。有关详细信息,请参阅 Visual Studio Code 市场(例如 Sort lines)。

这个包有“排序线(唯一)”选项,它为我做了。注意行首/结尾处的任何空白。它们影响线条是否被认为是唯一的。

【讨论】:

【解决方案2】:

如果行的顺序不重要

按字母顺序对行进行排序(如果还没有),然后执行以下步骤:
(基于此相关问题:How do I find and remove duplicate lines from a file using Regular Expressions?)

  1. 控制+F

  2. 切换“替换模式”

  3. 切换“使用正则表达式”(带有 .* 符号的图标)

  4. 在搜索字段中,输入^(.*)(\n\1)+$

  5. 在“替换为”字段中,输入$1

  6. 点击(“全部替换”)。

如果行的顺序很重要所以你不能排序

在这种情况下,要么求助于 VS Code 之外的解决方案(请参阅here),或者 - 如果您的文档不是很大并且您不介意向“全部替换”按钮发送垃圾邮件 - 请按照前面的步骤进行操作,但在步骤 4 和 5,输入:
(基于Remove specific duplicate lines without sorting)

注意:行数过多 (1000+) 的文件块;可能导致 VS Code 崩溃;在某些情况下可能会引入空行。

  • 搜索:((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?

  • 替换为:$1

然后点击“全部替换”按钮重复出现次数。

当您单击按钮时行数停止减少时,您就会知道这已经足够了。导航到文档的最后一行以密切关注。

【讨论】:

  • ((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)? 使我的 vscode 崩溃......我在一个文件中查找了 229 行。 :(
  • @Hickory420 我在我的机器上测试了 1000 行(20 字符长,随机)并且没有崩溃,但确实有一个线程在每次通过时阻塞了 100% cpu 负载几秒钟。是的,这对于大文件来说几乎不实用。
  • 谢谢。你能解释一下正则表达式^(.*)(\n\1)+$。删除重复行后,我想查看 csv 中第一列重复的所有行,并想修改正则表达式。
  • 哇,我觉得我很擅长正则表达式,这仍然让我大吃一惊,很好的答案!
  • 哇,使用正则表达式捕获组进行替换真是太有用了!谢谢
【解决方案3】:

尝试查找并替换为regular expression。

  • 查找: ^(.+)((?:\r?\n.*)*)(?:\r?\n\1)$

  • 替换: $1$2

可能会在第一组中引入一些差异。

【讨论】:

    【解决方案4】:

    安装 DupChecker 扩展,点击 F1,然后输入“Check Duplicates”。

    它将检查重复项并询问您是否要删除它们。

    【讨论】:

      【解决方案5】:

      vscode v1.62 中引入了一个从选择中删除重复行的命令:

      Delete Duplicate Lines 在命令面板中

      或

      editor.action.removeDuplicateLines 作为键绑定中的命令

      (此命令没有默认键绑定)


      这是一个非常有趣的扩展:Transformer

      特点:

      • 作为新文档的唯一行
      • 独特的线条

      • 对齐 CSV
      • 与光标对齐
      • 压缩 CSV
      • 复制到新文档
      • 将重复行计数为新文档
      • 编码/解码
      • 将行过滤为新文档
      • 过滤线
      • 加入行
      • JSON 字符串作为文本
      • JSON 字符串数组行
      • 规范化变音符号
      • 随机化线条
      • 随机选择
      • 反转线
      • 反向选择
      • 向后旋转选择
      • 向前旋转选择
      • 选择亮点
      • 选择行
      • 选择为 JSON 字符串
      • 按长度排序行
      • 对行进行排序
      • 对选择进行排序
      • 之后分割线
      • 之前的分割线
      • 分割线
      • 修剪线
      • 修剪选择

      独特的线条

      从文档中删除重复的行 如果没有选择,则为当前块

      作为新文档的唯一行

      在新文档中打开唯一行 如果没有选择,则为当前块

      除了“Unique Lines”命令外,我没怎么玩过它,但它似乎做得很好(包括尝试宏记录器!)。

      【讨论】:

        【解决方案6】:

        添加到@Marc.2377 的回复中。

        如果顺序很重要并且您不在乎只保留最后一个重复行,如果您只想删除重复的非空行,只需搜索以下正则表达式

        ^(.+\n)(?=(?:.*\n)*?\1)
        

        如果您还想删除重复的空行,请使用* 而不是+

        ^(.*\n)(?=(?:.*\n)*?\1)
        

        然后什么都不替换。

        这将占用一行并尝试在前面找到更多(可能是 0)行,然后是完全相同的行。它将删除占用的行。

        这只是一个一次性的正则表达式。无需向替换按钮发送垃圾邮件。

        【讨论】:

        • 非常简洁
        • 不错。我推荐^(.+\n)(?=(?:.*\n)*?\1),因为您的正则表达式删除了一个不希望出现的空行。还是投了赞成票。
        • 很好……OTOH:重复的空行也是重复的;)
        • @Skeeve 来吧,这只是一点点感谢您的有用回答和一切为了更好的社区:)
        • xxx(?=…) 是一个前瞻匹配。因此,它确保“xxx”之后的任何内容都与“...”匹配,但不会推进搜索。 (?:…) 只是一个括号,不计入括号计数。 .*\n 是(可能是空的)行的模式。 * 表示可能有几行,甚至没有。星号 (*) 后面的 ? 表示我们想要尽可能少的行。因为\1 跟在这个表达式后面,所以我们会提前查找所有与\1 不匹配的行,直到找到匹配\1 的行。我希望这能说明问题。
        【解决方案7】:

        实际上不是在 Visual Studio Code 中,但如果它有效,它就有效。

        1. 打开一个新的 Excel 电子表格
        2. 将数据粘贴到列中
        3. 转到数据标签
        4. 选择数据列(如果您还没有)
        5. 单击删除重复项(位于栏的中间)
        6. 单击确定删除重复项。

        这不是最佳答案,因为您指定了 Visual Studio Code,但正如我所说:如果它有效,那么它有效 :)

        【讨论】:

        • 您可以通过 providing a script 使其更相关,可以直接从 Visual Studio Code 调用。换句话说,自动化这个过程。我不知道这是否可能,但一个脚本将通过其公开的 COM 接口调用 Excel。这将使这个答案更有价值,因为它将成为利用其他应用程序做整洁事情的一个例子。
        【解决方案8】:

        Sublime Text 3

        它具有极快的原生置换函数。

        • Edit > Permute Lines > Unique 或 ⇧⌘U,以及
        • Edit > Permute Selections > Unique

        Visual Studio Code 是我的日常司机。但是,我让Sublime Text 在这些情况下处于待命状态。

        【讨论】:

          【解决方案9】:

          如果您不介意在您的 VS 代码中添加一些 Vim。你可以安装 Vim 仿真插件。

          然后就可以使用vim命令了

          :sort u
          

          它将对行进行排序并删除重复项

          【讨论】:

            猜你喜欢
            • 2016-12-08
            • 1970-01-01
            • 2019-01-08
            • 1970-01-01
            • 2022-06-20
            • 1970-01-01
            • 1970-01-01
            • 2023-02-24
            • 2020-12-21
            相关资源
            最近更新 更多