崇高-删除所有包含特定值的行


116

我有一个900mb的日志文件,可以在SublimeText 3中打开。该文件用类似于以下内容的行lines肿。

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完成。
酒吧

Answers:


229

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

单击查找>替换。

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

对于“查找内容”字段,输入:

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

将“替换为”字段保留为空。

单击全部替换


16
最后的句号/句点很重要,没有它,它将无法正常工作。另外,您也可以使用:^.*No records to send and/or not connected\S.*$
Navigatron 2015年

如果要处理大文件,则此解决方案是唯一可行的解​​决方案。当我Ctrl+Shift+K选择了200,000 行时,机器卡住了几分钟。
Przemek D

依玛(Imma)用我的2600万行文件尝试了此操作:')
YB原因

63

对于不想写正则表达式的人,您只需选择搜索字符串,然后ctrl+cmd+g从菜单中单击或选择“ Quick Find All”,即可为每个匹配的字符串提供选择;从那里Home将每个选择光标移动到行的开头,shift+End将选择每个匹配的行,并del, del删除所有它们。

多光标编辑很有趣!


4
这是一个非常有用的通用提示。我的目标是删除所有包含字符串的行。我最终选择了它的一个实例,然后使用“ QuickFind”和快捷方式, Ctrl+Cmd+G如Leonid建议选择所有这些字符串。之后,我可以直接进入“删除线”,Ctrl-Shift-K并用外科手术立即去除所有带有该线的线。Sublime Text确实是我使用过的最好的文本编辑器。
MiB

ctrl + cmd + g与Windows上的ctrl + alt + g相同吗?我无法
黑色熊猫

@black panda对于Windows“快速查找全部”是alt + f3-感谢Leonid +1
Christopher

如果您像我一样,但是没有“主页”按钮,则也可以使用CMD + <-(向左箭头)
Koray Tugay,2016年

4
您也可以使用cmd + L将选择范围扩展到行。
Koray Tugay

53

我无法使正则表达式正常工作,因此我从此答案中使用了Alt-F3方法:

/superuser/452189/how-can-i-filter-a-file-for-lines- contains-a-string-in-sublime-text-2 / 598999#598999

  1. 选择感兴趣的字符串
  2. Alt+ F3可以在所有情况下进入多光标模式(在Mac OS X上为Ctrl+ CMD+ G
  3. 点击Ctrl+ L[查看评论](在Mac上为Cmd+ L
  4. 复制粘贴选择到另一个缓冲区
  5. Del

2
两件事:(1)您可以像这样链接到一个单独的答案(2)您应该在此处总结另一个答案(并根据需要专门回答这个问题)。
编译器

4
您可以将替换为步骤3和4 CTRL + L,从而将选择范围扩展到整行,包括换行符。
Chnossos 2015年

2
对于像我这样被MAC密钥方案诅咒的人:Ctrl+Cmd+G对于所有事件都使用多光标,Cmd+L扩展行以及通常的复制/粘贴
Cyril Duchon-Doris

27

这是我为Windows用户找到的:

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

21

在我的情况下,上面建议的两个正则表达式代码均不起作用,但这确实起作用:

.*(text in question).*

它将使您的代码上的空行是您想要的吗?如果不是,请在末尾添加\n$.*(text in question).*\n
用户

如果行具有“ abc / xyz / something”之类的结构,则使用正则表达式添加“ \”。例如,如果我们必须搜索abc /和/ something之间的任何内容,则表达式将为:abc /\.*.*\/ something
Avik

为我工作,如果您需要像我一样进行多次比赛,请|像这样使用:.*(a).*|.*(b).*|.*(c).*
bryc

0

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

这对我有用:

  1. 复制您要删除的行中的最后一个单词
  2. 找到所有
  3. 按Delete键删除整行

0

上面的答案是正确的方法,但是如果您想摆脱仅包含一个字符串的行,则可以执行以下操作:查找->替换->放置^.*[a-zA-Z]+.*\n在查找部分,并用空白保持替换。点击替换所有按钮,这将删除所有行,甚至其中只有一个字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.