【问题标题】:Sublime - delete all lines containing specific valueSublime - 删除所有包含特定值的行
【发布时间】:2014-10-04 21:15:55
【问题描述】:

我有一个 900mb 的日志文件,我可以在 SublimeText 3 中打开它。这个文件很臃肿,包含类似于以下的行。

10/08/2014 23:45:31:828,Information,,,,ExportManager: ,No records to send and/or not connected

如何过滤掉所有包含No records to send and/or not connected的行

【问题讨论】:

  • 虽然以下解决方案有效,但这种类型的工作确实应该使用 sed/awk 来处理大文件。

标签: sublimetext sublimetext3


【解决方案1】:

您可以进行正则表达式搜索和替换:

单击查找 > 替换。

确保按下正则表达式按钮。

对于 Find What 字段,输入:

^.*No records to send and/or not connected.*\n

将替换为字段留空。

点击全部替换

【讨论】:

  • 结尾的句号/句号很重要,没有它,它就行不通。或者,你可以使用这个:^.*No records to send and/or not connected\S.*$
  • 如果您在处理大文件,此解决方案是唯一可行的解​​决方案。当我选择了 200,000 行时,我的机器卡住了几分钟 Ctrl+Shift+K
  • 我用我的 26 000 000 行文件试试这个:')
【解决方案2】:

对于不想编写正则表达式的人 - 您可以选择搜索字符串,点击 ctrl+cmd+g 或从菜单中选择“快速查找全部”,这将为您提供每个匹配字符串的选择;从那里Home 会将每个选择光标移动到行首,shift+End 将选择每个匹配的行,del, del 将删除所有这些。

多光标编辑很有趣!

【讨论】:

  • 这是一个非常有用的更通用的技巧。我的目标是删除所有包含字符串的行。我最终选择了它的一个实例,然后使用“QuickFind”和快捷方式Ctrl+Cmd+G,正如 Leonid 建议的那样选择所有这些字符串。在此之后,我可以直接转到“删除行”Ctrl-Shift-K,并通过手术将所有带有此字符串的行立即删除。 Sublime Text 真的是我用过的最好的文本编辑器。
  • ctrl+cmd+g 和 Windows 上的 ctrl+alt+g 一样吗?我无法让它工作
  • @black panda 对于 windows “快速查找所有”是 alt+f3 - 谢谢 Leonid +1
  • 如果你和我一样没有Home键,也可以使用CMD +
  • 您也可以使用 cmd + L 将选择扩展到行。
【解决方案3】:

我无法让正则表达式工作,所以我从这个答案中使用了 Alt-F3 方法:

https://superuser.com/questions/452189/how-can-i-filter-a-file-for-lines-containing-a-string-in-sublime-text-2/598999#598999

  1. 选择感兴趣的字符串
  2. 点击 Alt+F3 进入多光标模式(Ctrl+CMD+ G 在 Mac OS X 上)
  3. 点击 Ctrl+L [参见 cmets](Cmd+L 在 Mac 上)
  4. 将所选内容复制粘贴到另一个缓冲区
  5. 删除

【讨论】:

  • 两件事:(1)你可以link to an individual answer like this(2)你应该在这里总结另一个答案(并根据需要专门回答这个问题)。
  • 您可以将第 3 步和第 4 步替换为 CTRL + L,这会将选择范围扩展到整行,包括换行符。
  • 对于像我这样被 MAC 密钥方案诅咒的人:Ctrl+Cmd+G 用于所有出现的多光标,Cmd+L 用于扩展行,以及通常的复制/粘贴
【解决方案4】:

这是我为 Windows 用户找到的:

  1. 选择字符串(包含该字符串的每一行都将被删除)。
  2. 按 ALT+F3 。
  3. 按 Ctrl+L 。
  4. 按删除。

【讨论】:

    【解决方案5】:

    上面建议的正则表达式代码都不适用于我的情况,但这确实有效:

    .*(text in question).*
    

    【讨论】:

    • 它会让你的代码出现空行,你想要吗?如果没有,请在末尾添加\n$.*(text in question).*\n
    • 如果行具有类似“abc/xyz/something”的结构,使用正则表达式添加'\'。例如,如果我们必须搜索 abc/ 和 /something 之间的任何内容,那么表达式将为:abc/\.*.*\/something
    • 对我有用,如果您像我一样需要多个匹配项,请使用 |,如下所示:.*(a).*|.*(b).*|.*(c).*
    【解决方案6】:

    我喜欢手动编辑解决方案,非常好。

    但是..您是否尝试过使用catgrep -v 过滤掉这些行并重定向到另一个文件?可能比学习正则表达式更好..(我个人总是从正则表达式开始,然后自己编辑文件结束)。

    在 Windows 中,您使用 findstr /v

    所以你会这样做:

    # in bash
    cat my.log | grep -v "No records to send and/or not connected" > new.log
    

    # in cmd
    cat my.log | findstr /v "No records to send and/or not connected" > new.log
    

    【讨论】:

      【解决方案7】:

      一个简单的方法是:

      • 1 打开 Sublime 文本
      • 2 查找 => 替换 (Ctrl + H)
      • 3 在 Find 中写下想要的文字
      • 4 点击查找全部
      • 5 按 ctrl + shift + K 删除所有存在此搜索的行

      这是删除包含某些文本的某些行的快速解决方案

      【讨论】:

        【解决方案8】:

        我在编辑站点地图时遇到了类似的问题

        这对我有用:

        1. 复制要删除的行中的最后一个单词
        2. 全部查找
        3. 按删除键删除整行

        【讨论】:

          【解决方案9】:

          上面的答案是正确的方法,但是如果你想用一个字符串去掉行,那么就这样做, 查找 -> 替换 -> 将 ^.*[a-zA-Z]+.*\n 放入查找部分并保留替换为空白。点击全部替换按钮,这将删除所有包含单个字符串的行。

          【讨论】:

            【解决方案10】:

            Find -> Find all(这将标记具有关键字的行) 然后去编辑->行->删除行

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-09-28
              • 2013-07-31
              • 2022-12-10
              • 2011-09-05
              • 2021-06-20
              相关资源
              最近更新 更多